2025-12-25 22:38:40 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:40 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:40 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:40 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:40 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:40 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:40 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:40 | DEBUG    | SecInterp.sec_interp.core.services.interpretation_service | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:40 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:40 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:40 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:41 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:41 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:41 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:41 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:41 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:41 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:41 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:41 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:41 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:41 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:41 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_cache_handler | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:41 | DEBUG    | SecInterp.sec_interp.gui.parallel_geology | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:41 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:41 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:41 | DEBUG    | SecInterp.sec_interp.gui.preview_optimizer | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:41 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:38:42 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:100 | Thread-127744158243776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:51 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:51 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:51 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:51 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:51 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:51 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:51 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:51 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:51 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:51 | DEBUG    | SecInterp.sec_interp.core.services.interpretation_service | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:51 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:51 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:51 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:52 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:52 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:52 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:52 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:52 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:52 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:52 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:52 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:52 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:52 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:52 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_cache_handler | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:52 | DEBUG    | SecInterp.sec_interp.gui.parallel_geology | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:52 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:52 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:52 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:52 | DEBUG    | SecInterp.sec_interp.gui.preview_optimizer | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:52 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:52 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:52 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:44:53 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:117 | Thread-135860159634368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_cache_handler | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.core.services.interpretation_service | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.gui.parallel_geology | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.gui.preview_optimizer | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:50:03 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:117 | Thread-126745223752640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_cache_handler | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.core.services.interpretation_service | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.gui.parallel_geology | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.gui.preview_optimizer | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:34 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:35 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:35 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:35 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 22:57:35 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:117 | Thread-138371214773184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_cache_handler | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.core.services.interpretation_service | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.gui.parallel_geology | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.gui.preview_optimizer | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:02:37 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:117 | Thread-131364106324928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_cache_handler | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.core.services.interpretation_service | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.gui.parallel_geology | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.gui.preview_optimizer | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:06:56 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:117 | Thread-128271970397120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_cache_handler | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.core.services.interpretation_service | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.gui.parallel_geology | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.gui.preview_optimizer | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:40 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:41 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:41 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:41 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:10:41 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:117 | Thread-131639046695872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_cache_handler | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.core.services.interpretation_service | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.gui.parallel_geology | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.gui.preview_optimizer | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:20:55 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:117 | Thread-128573825739712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_cache_handler | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.core.services.interpretation_service | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.gui.parallel_geology | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.gui.preview_optimizer | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:26:59 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:27:00 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:27:00 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:27:00 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:27:00 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:117 | Thread-136004315532224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_cache_handler | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.core.services.interpretation_service | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.gui.parallel_geology | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.gui.preview_optimizer | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-25 23:32:10 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:117 | Thread-125455389109184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:21 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:21 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:21 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:21 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:21 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:21 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:21 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:21 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:21 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:21 | DEBUG    | SecInterp.sec_interp.core.services.interpretation_service | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:21 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:21 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:21 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:22 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:22 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:22 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:22 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:22 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:22 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:22 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:22 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:22 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:22 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:22 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_cache_handler | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:22 | DEBUG    | SecInterp.sec_interp.gui.parallel_geology | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:22 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:22 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:22 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:22 | DEBUG    | SecInterp.sec_interp.gui.preview_optimizer | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:22 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:22 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:22 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:28:24 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:118 | Thread-124004870224832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_cache_handler | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.core.services.interpretation_service | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.gui.parallel_geology | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.gui.preview_optimizer | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 20:36:55 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:118 | Thread-126582537112512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:53 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:53 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:53 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:53 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:53 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:53 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:53 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:53 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:53 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:53 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:53 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:54 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_cache_handler | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:54 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:54 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:54 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:54 | DEBUG    | SecInterp.sec_interp.core.services.interpretation_service | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:54 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:54 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:54 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:54 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:54 | DEBUG    | SecInterp.sec_interp.gui.parallel_geology | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:54 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:54 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:54 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:54 | DEBUG    | SecInterp.sec_interp.gui.preview_optimizer | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:54 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:54 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:04:54 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:118 | Thread-132279413480384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:10 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:10 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:10 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:10 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:10 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:10 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:10 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:10 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:10 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:10 | DEBUG    | SecInterp.sec_interp.core.services.interpretation_service | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:10 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:10 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:10 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:11 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:11 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:11 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:11 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:11 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:11 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:11 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:11 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:11 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:11 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_cache_handler | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:11 | DEBUG    | SecInterp.sec_interp.gui.parallel_geology | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:11 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:11 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:11 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:11 | DEBUG    | SecInterp.sec_interp.gui.preview_optimizer | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:11 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:11 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:11 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:10:12 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:118 | Thread-125019076266944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.core.services.interpretation_service | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_cache_handler | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.gui.parallel_geology | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.gui.preview_optimizer | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:14:29 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:118 | Thread-127906315127744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:18:19 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:118 | Thread-126039164480448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:18:19 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:118 | Thread-126039164480448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:18:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:118 | Thread-126039164480448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:18:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:118 | Thread-126039164480448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:18:19 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:118 | Thread-126039164480448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:18:19 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:118 | Thread-126039164480448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:18:19 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:118 | Thread-126039164480448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:18:19 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:118 | Thread-126039164480448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:18:19 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:118 | Thread-126039164480448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:18:19 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:118 | Thread-126039164480448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:18:19 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:118 | Thread-126039164480448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:21:23 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:118 | Thread-140603893775296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:21:23 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:118 | Thread-140603893775296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:21:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:118 | Thread-140603893775296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:21:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:118 | Thread-140603893775296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:21:23 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:118 | Thread-140603893775296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:21:23 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:118 | Thread-140603893775296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:21:23 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:118 | Thread-140603893775296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:21:23 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:118 | Thread-140603893775296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:21:23 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:118 | Thread-140603893775296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:21:23 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:118 | Thread-140603893775296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:21:23 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:118 | Thread-140603893775296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:25:18 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:118 | Thread-125404344355776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:25:18 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:118 | Thread-125404344355776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:25:18 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:118 | Thread-125404344355776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:25:18 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:118 | Thread-125404344355776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:25:18 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:118 | Thread-125404344355776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:25:18 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:118 | Thread-125404344355776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:25:18 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:118 | Thread-125404344355776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:25:18 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:118 | Thread-125404344355776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:25:18 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:118 | Thread-125404344355776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:25:18 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:118 | Thread-125404344355776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:25:18 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:118 | Thread-125404344355776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:29:43 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:118 | Thread-129308803455936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:29:43 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:118 | Thread-129308803455936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:29:43 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:118 | Thread-129308803455936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:29:43 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:118 | Thread-129308803455936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:29:43 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:118 | Thread-129308803455936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:29:43 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:118 | Thread-129308803455936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:29:43 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:118 | Thread-129308803455936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:29:43 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:118 | Thread-129308803455936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:29:43 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:118 | Thread-129308803455936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:29:43 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:118 | Thread-129308803455936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:29:43 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:118 | Thread-129308803455936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:37:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:118 | Thread-133247034452928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:37:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:118 | Thread-133247034452928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:37:17 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:118 | Thread-133247034452928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:37:17 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:118 | Thread-133247034452928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:37:17 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:118 | Thread-133247034452928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:37:17 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:118 | Thread-133247034452928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:37:17 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:118 | Thread-133247034452928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:37:17 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:118 | Thread-133247034452928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:37:17 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:118 | Thread-133247034452928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:37:17 | DEBUG    | SecInterp.sec_interp.core.services.interpretation_service | get_logger:118 | Thread-133247034452928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:37:17 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:118 | Thread-133247034452928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:37:17 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:118 | Thread-133247034452928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:37:17 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:118 | Thread-133247034452928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:53:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:118 | Thread-130405963135936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:53:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:118 | Thread-130405963135936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:53:14 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:118 | Thread-130405963135936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:53:14 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:118 | Thread-130405963135936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:53:14 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:118 | Thread-130405963135936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:53:14 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:118 | Thread-130405963135936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:53:14 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:118 | Thread-130405963135936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:53:14 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:118 | Thread-130405963135936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:53:14 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:118 | Thread-130405963135936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:53:14 | DEBUG    | SecInterp.sec_interp.core.services.interpretation_service | get_logger:118 | Thread-130405963135936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:53:14 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:118 | Thread-130405963135936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:53:14 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:118 | Thread-130405963135936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 21:53:14 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:118 | Thread-130405963135936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:33:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:118 | Thread-139013319539648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:33:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:118 | Thread-139013319539648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:33:29 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:118 | Thread-139013319539648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:33:29 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:118 | Thread-139013319539648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:33:29 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:118 | Thread-139013319539648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:33:29 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:118 | Thread-139013319539648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:33:29 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:118 | Thread-139013319539648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:33:29 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:118 | Thread-139013319539648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:33:29 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:118 | Thread-139013319539648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:33:29 | DEBUG    | SecInterp.sec_interp.core.services.interpretation_service | get_logger:118 | Thread-139013319539648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:33:29 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:118 | Thread-139013319539648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:33:29 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:118 | Thread-139013319539648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:33:29 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:118 | Thread-139013319539648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:39:05 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:118 | Thread-128931239250880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:39:05 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:118 | Thread-128931239250880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:39:05 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:118 | Thread-128931239250880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:39:05 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:118 | Thread-128931239250880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:39:05 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:118 | Thread-128931239250880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:39:05 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:118 | Thread-128931239250880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:39:05 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:118 | Thread-128931239250880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:39:05 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:118 | Thread-128931239250880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:39:05 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:118 | Thread-128931239250880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:39:05 | DEBUG    | SecInterp.sec_interp.core.services.interpretation_service | get_logger:118 | Thread-128931239250880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:39:05 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:118 | Thread-128931239250880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:39:05 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:118 | Thread-128931239250880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:39:05 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:118 | Thread-128931239250880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:42:33 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:118 | Thread-123458206452672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:42:33 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:118 | Thread-123458206452672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:42:33 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:118 | Thread-123458206452672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:42:33 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:118 | Thread-123458206452672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:42:33 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:118 | Thread-123458206452672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:42:33 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:118 | Thread-123458206452672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:42:33 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:118 | Thread-123458206452672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:42:33 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:118 | Thread-123458206452672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:42:33 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:118 | Thread-123458206452672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:42:33 | DEBUG    | SecInterp.sec_interp.core.services.interpretation_service | get_logger:118 | Thread-123458206452672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:42:33 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:118 | Thread-123458206452672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:42:33 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:118 | Thread-123458206452672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:42:33 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:118 | Thread-123458206452672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:45:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:118 | Thread-135387473255360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:45:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:118 | Thread-135387473255360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:45:07 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:118 | Thread-135387473255360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:45:07 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:118 | Thread-135387473255360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:45:07 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:118 | Thread-135387473255360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:45:07 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:118 | Thread-135387473255360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:45:07 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:118 | Thread-135387473255360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:45:07 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:118 | Thread-135387473255360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:45:07 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:118 | Thread-135387473255360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:45:07 | DEBUG    | SecInterp.sec_interp.core.services.interpretation_service | get_logger:118 | Thread-135387473255360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:45:07 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:118 | Thread-135387473255360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:45:07 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:118 | Thread-135387473255360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:45:07 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:118 | Thread-135387473255360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:51:18 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:118 | Thread-130808536509376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:51:18 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:118 | Thread-130808536509376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:51:18 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:118 | Thread-130808536509376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:51:18 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:118 | Thread-130808536509376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:51:18 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:118 | Thread-130808536509376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:51:18 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:118 | Thread-130808536509376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:51:18 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:118 | Thread-130808536509376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:51:18 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:118 | Thread-130808536509376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:51:18 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:118 | Thread-130808536509376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:51:18 | DEBUG    | SecInterp.sec_interp.core.services.interpretation_service | get_logger:118 | Thread-130808536509376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:51:18 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:118 | Thread-130808536509376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:51:18 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:118 | Thread-130808536509376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:51:18 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:118 | Thread-130808536509376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:51:18 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:118 | Thread-130808536509376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:51:18 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:118 | Thread-130808536509376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:51:18 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:118 | Thread-130808536509376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:51:18 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:118 | Thread-130808536509376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:51:18 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:118 | Thread-130808536509376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:51:18 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:118 | Thread-130808536509376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 22:51:18 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:118 | Thread-130808536509376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 23:27:08 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:118 | Thread-127880901893056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 23:27:08 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:118 | Thread-127880901893056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 23:27:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:118 | Thread-127880901893056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 23:27:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:118 | Thread-127880901893056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 23:27:08 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:118 | Thread-127880901893056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 23:27:08 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:118 | Thread-127880901893056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 23:27:08 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:118 | Thread-127880901893056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 23:27:08 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:118 | Thread-127880901893056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 23:27:08 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:118 | Thread-127880901893056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 23:27:08 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:118 | Thread-127880901893056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 23:27:08 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:118 | Thread-127880901893056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 23:33:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:118 | Thread-137854546078656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 23:33:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:118 | Thread-137854546078656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 23:33:20 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:118 | Thread-137854546078656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 23:33:20 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:118 | Thread-137854546078656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 23:33:20 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:118 | Thread-137854546078656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 23:33:20 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:118 | Thread-137854546078656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 23:33:20 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:118 | Thread-137854546078656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 23:33:20 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:118 | Thread-137854546078656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 23:33:20 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:118 | Thread-137854546078656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 23:33:20 | DEBUG    | SecInterp.sec_interp.core.services.interpretation_service | get_logger:118 | Thread-137854546078656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 23:33:20 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:118 | Thread-137854546078656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 23:33:20 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:118 | Thread-137854546078656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-26 23:33:20 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:118 | Thread-137854546078656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:48:59 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:48:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:48:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:48:59 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:48:59 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:48:59 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:48:59 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:48:59 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:48:59 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:48:59 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:48:59 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:48:59 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:48:59 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:00 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:00 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:00 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:00 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:00 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:00 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:00 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:00 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:00 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:00 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:00 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:00 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:00 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:00 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:126 | Thread-132628687465408 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:49:46 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:126 | Thread-139331017341888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:53:25 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:126 | Thread-134777891965888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:53:25 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:126 | Thread-134777891965888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:53:25 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:126 | Thread-134777891965888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:53:25 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:126 | Thread-134777891965888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:53:25 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:126 | Thread-134777891965888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:53:25 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:126 | Thread-134777891965888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:53:25 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:126 | Thread-134777891965888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:53:25 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:126 | Thread-134777891965888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:53:25 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:126 | Thread-134777891965888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:53:25 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:126 | Thread-134777891965888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:53:25 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:126 | Thread-134777891965888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:53:25 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:126 | Thread-134777891965888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:53:25 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:126 | Thread-134777891965888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:53:26 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:126 | Thread-134777891965888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:53:26 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:126 | Thread-134777891965888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:53:26 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:126 | Thread-134777891965888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:53:26 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:126 | Thread-134777891965888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:53:26 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:126 | Thread-134777891965888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:53:26 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:126 | Thread-134777891965888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:53:26 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:126 | Thread-134777891965888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:53:26 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:126 | Thread-134777891965888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:53:26 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:126 | Thread-134777891965888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:53:26 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:126 | Thread-134777891965888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:53:26 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:126 | Thread-134777891965888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:53:26 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:126 | Thread-134777891965888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:53:26 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:126 | Thread-134777891965888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:53:26 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:126 | Thread-134777891965888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:53:26 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:126 | Thread-134777891965888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:53:26 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:126 | Thread-134777891965888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:53:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:126 | Thread-134777891965888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:53:26 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:126 | Thread-134777891965888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:53:26 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:126 | Thread-134777891965888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:53:26 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:126 | Thread-134777891965888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 08:59:17 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:126 | Thread-126918490495936 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 09:04:28 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:126 | Thread-137948754983872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 09:04:28 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:126 | Thread-137948754983872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 09:04:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:126 | Thread-137948754983872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 09:04:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:126 | Thread-137948754983872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 09:04:28 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:126 | Thread-137948754983872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 09:04:28 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:126 | Thread-137948754983872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 09:04:28 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:126 | Thread-137948754983872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 09:04:28 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:126 | Thread-137948754983872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 09:04:28 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:126 | Thread-137948754983872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 09:04:28 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:126 | Thread-137948754983872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 09:04:28 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:126 | Thread-137948754983872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 09:04:28 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:126 | Thread-137948754983872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 09:05:29 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:126 | Thread-139571587443648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 09:05:29 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:126 | Thread-139571587443648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 09:05:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:126 | Thread-139571587443648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 09:05:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:126 | Thread-139571587443648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 09:05:29 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:126 | Thread-139571587443648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 09:05:29 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:126 | Thread-139571587443648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 09:05:29 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:126 | Thread-139571587443648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 09:05:29 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:126 | Thread-139571587443648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 09:05:29 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:126 | Thread-139571587443648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 09:05:29 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:126 | Thread-139571587443648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 09:05:29 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:126 | Thread-139571587443648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 09:05:29 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:126 | Thread-139571587443648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:30 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:30 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:30 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:30 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:30 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:30 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:30 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:31 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:31 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:31 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:31 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:31 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:31 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:31 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:31 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:31 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:31 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:31 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:31 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:31 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:31 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:31 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:31 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:31 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:31 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:31 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:31 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:31 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 18:27:31 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-133415678614464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:43:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-127782142098368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:43:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-127782142098368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:43:31 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-127782142098368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:43:31 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-127782142098368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:51:21 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-126340255566784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:51:21 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-126340255566784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:51:21 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-126340255566784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:51:21 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-126340255566784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:51:21 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-126340255566784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:51:21 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-126340255566784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:51:21 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-126340255566784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:51:21 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-126340255566784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:51:21 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-126340255566784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:51:21 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-126340255566784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:51:21 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-126340255566784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:51:21 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-126340255566784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:51:21 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-126340255566784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:51:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-126340255566784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:51:21 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-126340255566784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:51:21 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-126340255566784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:51:21 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-126340255566784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:51:21 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-126340255566784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:51:21 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-126340255566784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:51:21 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-126340255566784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:51:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-126340255566784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:51:21 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-126340255566784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:51:21 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-126340255566784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:51:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-126340255566784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:51:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-126340255566784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:51:21 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-126340255566784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:51:21 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-126340255566784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:51:21 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-126340255566784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:51:21 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-126340255566784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:51:21 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-126340255566784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:51:21 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-126340255566784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:51:21 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-126340255566784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 21:51:21 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-126340255566784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:03 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:03 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:03 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:03 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:03 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:03 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:04 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:04 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:04 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:04 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:04 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:04 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:04 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:04 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:04 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:05 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:05 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:05 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:05 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:05 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:05 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:05 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:05 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:05 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:05 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:05 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:05 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:05 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:05 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:06 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:07:06 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-136416887253952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:14:45 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-130489830869952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:14:45 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-130489830869952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:14:45 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-130489830869952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:14:45 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-130489830869952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:14:45 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-130489830869952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:14:45 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-130489830869952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:14:45 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-130489830869952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:14:45 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-130489830869952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:14:45 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-130489830869952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:14:45 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-130489830869952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:14:45 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-130489830869952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:14:45 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-130489830869952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:14:45 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-130489830869952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:14:45 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-130489830869952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:14:45 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-130489830869952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:14:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-130489830869952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:19:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-129580651498432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:19:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-129580651498432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:19:58 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-129580651498432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:19:58 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-129580651498432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:19:58 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-129580651498432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:19:58 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-129580651498432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:19:58 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-129580651498432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:19:58 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-129580651498432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:19:58 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-129580651498432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:19:58 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-129580651498432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:19:58 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-129580651498432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:19:58 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-129580651498432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:19:58 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-129580651498432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:19:58 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-129580651498432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:19:58 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-129580651498432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:19:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-129580651498432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:20:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-127662207658944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:20:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-127662207658944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:20:00 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-127662207658944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:20:00 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-127662207658944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:20:00 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-127662207658944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:20:00 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-127662207658944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:20:00 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-127662207658944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:20:00 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-127662207658944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:20:00 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-127662207658944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:20:00 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-127662207658944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:20:00 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-127662207658944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:20:00 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-127662207658944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:20:00 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-127662207658944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:20:00 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-127662207658944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:20:00 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-127662207658944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:20:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-127662207658944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:24:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-134915273964480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:24:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-134915273964480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:24:14 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-134915273964480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:24:14 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-134915273964480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:24:14 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-134915273964480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:24:14 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-134915273964480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:24:14 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-134915273964480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:24:14 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-134915273964480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:24:14 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-134915273964480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:24:14 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-134915273964480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:24:14 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-134915273964480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:24:14 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-134915273964480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:24:14 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-134915273964480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:24:14 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-134915273964480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:24:14 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-134915273964480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:24:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-134915273964480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:33 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:33 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:33 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:33 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:33 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:33 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:34 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:34 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:34 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:34 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:34 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:34 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:34 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:34 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:34 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:34 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:35 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:35 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:35 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:35 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:35 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:35 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:35 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:35 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:35 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:35 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:35 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:35 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:35 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:35 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:35 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:35 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:35 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:35 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:35 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:36 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-28 23:58:36 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-140390240529344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:53:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-130537971940288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:53:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-130537971940288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:53:26 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-130537971940288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:53:26 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-130537971940288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:01 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:01 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:01 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:01 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:02 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:02 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:02 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:02 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:02 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:02 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:02 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:02 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:02 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:02 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:03 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:03 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:03 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:03 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:03 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:03 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:03 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:03 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:03 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:03 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:03 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:03 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:03 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:03 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:04 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 02:58:04 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-132459548834752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:28 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:28 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:28 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:28 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:28 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:29 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:29 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:29 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:29 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:29 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:29 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:29 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:29 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:29 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:30 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:30 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:30 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:30 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:30 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:30 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:30 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:30 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:30 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:30 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:30 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:30 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:30 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:31 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:01:31 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-127868917382080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:26 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:26 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:26 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:26 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:27 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:27 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:27 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:27 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:27 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:27 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:27 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:27 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:27 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:27 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:27 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:28 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:28 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:28 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:28 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:28 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:28 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:28 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:28 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:28 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:28 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:28 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:28 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:28 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:29 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:05:29 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-124422180486080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:07 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:07 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:07 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:07 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:08 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:08 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:08 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:08 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:08 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:08 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:08 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:08 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:08 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:09 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:09 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:09 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:09 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:09 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:09 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:09 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:09 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:09 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:09 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:09 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:09 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:09 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:09 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:09 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:09 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:09 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:09 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:09 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:10 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:07:10 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-125042910464960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:16 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:16 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:16 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:16 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:17 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:18 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:18 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:18 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:18 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:18 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:18 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:18 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:18 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:18 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:19 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:19 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:19 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:19 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:19 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:19 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:19 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:19 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:19 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:19 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:19 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:19 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:19 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:19 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:20 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:09:20 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-135629714807744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:16 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:16 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:16 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:16 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:17 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:17 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:17 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:17 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:17 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:17 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:17 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:17 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:17 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:18 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:18 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:18 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:18 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:18 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:18 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:18 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:18 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:18 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:18 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:18 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:18 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:18 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:18 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:19 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:11:19 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-123763339041728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:31 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:31 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:31 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:31 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:32 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:32 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:32 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:32 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:32 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:32 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:32 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:32 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:32 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:33 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:33 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:33 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:33 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:33 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:33 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:33 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:33 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:33 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:33 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:33 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:33 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:34 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-29 03:13:34 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-125846181116864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:31 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:31 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:31 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:31 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:32 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:32 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:32 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:32 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:32 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:32 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:32 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:32 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:32 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:33 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:34 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:34 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:34 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:34 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:34 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:34 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:34 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:34 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:34 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:34 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:34 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:34 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:34 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:35 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2025-12-31 19:22:35 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-138929100250048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:54:29 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-127055493823424 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:54:29 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-127055493823424 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:54:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-127055493823424 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:54:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-127055493823424 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:54:29 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-127055493823424 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:54:29 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-127055493823424 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:54:29 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-127055493823424 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:54:29 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-127055493823424 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:54:29 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-127055493823424 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:54:29 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-127055493823424 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:54:29 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-127055493823424 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:54:29 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-127055493823424 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:54:29 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-127055493823424 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:55:25 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-137037236976576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:55:25 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-137037236976576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:55:25 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-137037236976576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:55:25 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-137037236976576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:55:25 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-137037236976576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:55:25 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-137037236976576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:55:25 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-137037236976576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:55:25 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-137037236976576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:55:25 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-137037236976576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:55:25 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-137037236976576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:55:25 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-137037236976576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:55:25 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-137037236976576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:55:25 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-137037236976576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:55:25 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:91 | Thread-137037236976576 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 10:55:25 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:91 | Thread-137037236976576 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-01 10:55:25 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:91 | Thread-137037236976576 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 10:57:45 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-137037839662016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:57:45 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-137037839662016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:57:45 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-137037839662016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:57:45 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-137037839662016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:57:45 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-137037839662016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:57:45 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-137037839662016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:57:45 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-137037839662016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:57:45 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-137037839662016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:57:45 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-137037839662016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:57:45 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-137037839662016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:57:45 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-137037839662016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:57:45 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-137037839662016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:57:45 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-137037839662016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:57:45 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:93 | Thread-137037839662016 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 10:57:45 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:141 | Thread-137037839662016 | Generated 3D geometry for polygon p1 is invalid. Attempting to fix.
2026-01-01 10:57:45 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:93 | Thread-137037839662016 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-01 10:57:45 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:141 | Thread-137037839662016 | Generated 3D geometry for polygon test_poly is invalid. Attempting to fix.
2026-01-01 10:57:45 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:93 | Thread-137037839662016 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 10:57:45 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:141 | Thread-137037839662016 | Generated 3D geometry for polygon fold is invalid. Attempting to fix.
2026-01-01 10:58:25 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-126614539078592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:58:25 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-126614539078592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:58:25 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-126614539078592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:58:25 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-126614539078592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:58:25 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-126614539078592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:58:25 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-126614539078592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:58:25 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-126614539078592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:58:25 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-126614539078592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:58:25 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-126614539078592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:58:25 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-126614539078592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:58:25 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-126614539078592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:58:25 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-126614539078592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:58:25 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-126614539078592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:58:25 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:93 | Thread-126614539078592 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 10:58:25 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:141 | Thread-126614539078592 | Generated 3D geometry for polygon p1 is invalid. Attempting to fix.
2026-01-01 10:58:25 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:93 | Thread-126614539078592 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-01 10:58:25 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:141 | Thread-126614539078592 | Generated 3D geometry for polygon test_poly is invalid. Attempting to fix.
2026-01-01 10:58:25 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:93 | Thread-126614539078592 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 10:58:25 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:141 | Thread-126614539078592 | Generated 3D geometry for polygon fold is invalid. Attempting to fix.
2026-01-01 10:59:12 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-128184667544512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:59:12 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-128184667544512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:59:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-128184667544512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:59:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-128184667544512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:59:12 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-128184667544512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:59:12 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-128184667544512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:59:12 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-128184667544512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:59:12 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-128184667544512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:59:12 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-128184667544512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:59:12 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-128184667544512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:59:12 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-128184667544512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:59:12 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-128184667544512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:59:12 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-128184667544512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 10:59:12 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:93 | Thread-128184667544512 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 10:59:12 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:141 | Thread-128184667544512 | Generated 3D geometry for polygon p1 is invalid. Attempting to fix.
2026-01-01 10:59:12 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:93 | Thread-128184667544512 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-01 10:59:12 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:141 | Thread-128184667544512 | Generated 3D geometry for polygon test_poly is invalid. Attempting to fix.
2026-01-01 10:59:12 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:93 | Thread-128184667544512 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 10:59:12 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:141 | Thread-128184667544512 | Generated 3D geometry for polygon fold is invalid. Attempting to fix.
2026-01-01 11:22:07 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-140258659744704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:22:07 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-140258659744704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:22:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-140258659744704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:22:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-140258659744704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:22:07 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-140258659744704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:22:07 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-140258659744704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:22:07 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-140258659744704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:22:07 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-140258659744704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:22:07 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-140258659744704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:22:07 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-140258659744704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:22:07 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-140258659744704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:22:07 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-140258659744704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:22:07 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-140258659744704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:22:07 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:94 | Thread-140258659744704 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 11:22:07 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:146 | Thread-140258659744704 | Generated 3D geometry for polygon p1 is invalid. Attempting to fix.
2026-01-01 11:22:07 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:94 | Thread-140258659744704 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-01 11:22:07 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:146 | Thread-140258659744704 | Generated 3D geometry for polygon test_poly is invalid. Attempting to fix.
2026-01-01 11:22:07 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:94 | Thread-140258659744704 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 11:22:07 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:146 | Thread-140258659744704 | Generated 3D geometry for polygon fold is invalid. Attempting to fix.
2026-01-01 11:41:50 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:50 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:50 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:50 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:50 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:50 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:51 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:51 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:52 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:52 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:52 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:52 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:52 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:52 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:52 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:52 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:52 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:52 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:52 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:52 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:52 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:52 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:52 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:52 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:52 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:52 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:52 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:52 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:52 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:52 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:52 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:53 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:41:53 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-138655124835264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:14 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:14 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:14 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:14 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:15 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:15 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:15 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:15 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:15 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:15 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:15 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:15 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:15 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:16 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:16 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:16 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:16 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:16 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:16 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:16 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:16 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:16 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:16 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:16 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:16 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:16 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:16 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:16 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:16 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:17 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:46:17 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-139572933602240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:19 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:19 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:19 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:19 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:19 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:20 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:20 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:20 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:20 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:20 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:20 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:20 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:20 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:20 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:21 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:21 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:21 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:21 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:21 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:21 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:21 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:21 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:21 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:21 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:21 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:21 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:21 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:21 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:21 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:22 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 11:49:22 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-137580321573824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:10:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-137374351649728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:10:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-137374351649728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:10:42 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-137374351649728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:10:42 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-137374351649728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:10:42 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-137374351649728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:10:42 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-137374351649728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:10:42 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-137374351649728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:10:42 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-137374351649728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:10:42 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-137374351649728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:10:42 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-137374351649728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:10:42 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-137374351649728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:10:42 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-137374351649728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:10:42 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-137374351649728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:10:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-137374351649728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:10:42 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-137374351649728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:10:42 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-137374351649728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:10:42 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-137374351649728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:10:42 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-137374351649728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:10:42 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-137374351649728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:10:42 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-137374351649728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:10:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-137374351649728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:10:42 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-137374351649728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:10:42 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-137374351649728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:10:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-137374351649728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:10:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-137374351649728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:10:42 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-137374351649728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:10:42 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-137374351649728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:10:42 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-137374351649728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:10:42 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-137374351649728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:10:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-137374351649728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:10:42 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-137374351649728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:10:42 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-137374351649728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:10:42 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-137374351649728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:13:39 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-130948760247232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:13:39 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-130948760247232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:13:39 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-130948760247232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:13:39 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-130948760247232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:13:39 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-130948760247232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:13:39 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-130948760247232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:13:39 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-130948760247232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:13:39 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-130948760247232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:13:39 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-130948760247232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:13:39 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-130948760247232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:13:39 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-130948760247232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:13:39 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-130948760247232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:13:39 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-130948760247232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:13:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-130948760247232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:13:39 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-130948760247232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:13:39 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-130948760247232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:13:39 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-130948760247232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:13:39 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-130948760247232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:13:39 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-130948760247232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:13:39 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-130948760247232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:13:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-130948760247232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:13:39 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-130948760247232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:13:39 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-130948760247232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:13:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-130948760247232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:13:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-130948760247232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:13:39 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-130948760247232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:13:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-130948760247232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:13:39 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-130948760247232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:13:39 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-130948760247232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:13:39 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-130948760247232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:13:39 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-130948760247232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:13:39 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-130948760247232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:13:39 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-130948760247232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:14:57 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-124270701329344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:14:57 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-124270701329344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:14:57 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-124270701329344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:14:57 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-124270701329344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:14:57 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-124270701329344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:14:57 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-124270701329344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:14:57 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-124270701329344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:14:57 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-124270701329344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:14:57 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-124270701329344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:14:57 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-124270701329344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:14:57 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-124270701329344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:14:57 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-124270701329344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:14:57 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-124270701329344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:14:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-124270701329344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:14:57 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-124270701329344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:14:57 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-124270701329344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:14:57 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-124270701329344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:14:57 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-124270701329344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:14:57 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-124270701329344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:14:57 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-124270701329344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:14:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-124270701329344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:14:57 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-124270701329344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:14:57 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-124270701329344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:14:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-124270701329344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:14:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-124270701329344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:14:57 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-124270701329344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:14:57 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-124270701329344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:14:57 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-124270701329344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:14:57 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-124270701329344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:14:57 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-124270701329344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:14:57 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-124270701329344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:14:57 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-124270701329344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:14:57 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-124270701329344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:15:47 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-140499248962496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:15:47 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-140499248962496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:15:47 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-140499248962496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:15:47 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-140499248962496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:15:47 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-140499248962496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:15:47 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-140499248962496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:15:47 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-140499248962496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:15:47 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-140499248962496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:15:47 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-140499248962496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:15:47 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-140499248962496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:15:47 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-140499248962496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:15:47 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-140499248962496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:15:47 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-140499248962496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:15:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-140499248962496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:15:47 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-140499248962496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:15:47 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-140499248962496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:15:47 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-140499248962496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:15:47 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-140499248962496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:15:47 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-140499248962496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:15:47 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-140499248962496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:15:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-140499248962496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:15:47 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-140499248962496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:15:47 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-140499248962496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:15:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-140499248962496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:15:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-140499248962496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:15:47 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-140499248962496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:15:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-140499248962496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:15:47 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-140499248962496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:15:47 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-140499248962496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:15:47 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-140499248962496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:15:47 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-140499248962496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:15:47 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-140499248962496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:15:47 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-140499248962496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:21:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-125182428494784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:21:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-125182428494784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:21:40 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-125182428494784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:21:40 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-125182428494784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:21:40 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-125182428494784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:21:40 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-125182428494784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:21:40 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-125182428494784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:21:40 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-125182428494784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:21:40 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-125182428494784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:21:40 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-125182428494784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:21:40 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-125182428494784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:21:40 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-125182428494784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:21:40 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-125182428494784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:21:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-125182428494784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:21:40 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-125182428494784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:21:40 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-125182428494784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:21:40 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-125182428494784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:21:40 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-125182428494784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:21:40 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-125182428494784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:21:40 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-125182428494784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:21:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-125182428494784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:21:40 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-125182428494784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:21:40 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-125182428494784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:21:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-125182428494784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:21:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-125182428494784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:21:40 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-125182428494784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:21:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-125182428494784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:21:40 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-125182428494784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:21:40 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-125182428494784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:21:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-125182428494784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:21:40 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-125182428494784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:21:40 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-125182428494784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:21:40 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-125182428494784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:24:40 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-128627494362048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:29:13 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-126307549440960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-130233664736192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130233664736192 | Config set: /SecInterp/scale = 500.0
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130233664736192 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130233664736192 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130233664736192 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130233664736192 | Config set: /SecInterp/last_output_dir =
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130233664736192 | Config set: /SecInterp/dpi = 300
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130233664736192 | Config set: /SecInterp/preview_width = 800
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130233664736192 | Config set: /SecInterp/preview_height = 600
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130233664736192 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130233664736192 | Config set: /SecInterp/export_quality = 95
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130233664736192 | Config set: /SecInterp/auto_lod = True
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130233664736192 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 12:30:01 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-130233664736192 | Configuration reset to defaults
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130233664736192 | Config set: /SecInterp/scale = 200.0
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-130233664736192 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-130233664736192 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:30:01 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-130233664736192 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:30:01 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-130233664736192 | Test Title: Test Message
2026-01-01 12:30:01 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-130233664736192 | Test Title: Test Message
2026-01-01 12:30:01 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-130233664736192 | Test Title: Test Message
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-129555004726208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-129555004726208 | Config set: /SecInterp/scale = 500.0
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-129555004726208 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-129555004726208 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-129555004726208 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-129555004726208 | Config set: /SecInterp/last_output_dir =
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-129555004726208 | Config set: /SecInterp/dpi = 300
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-129555004726208 | Config set: /SecInterp/preview_width = 800
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-129555004726208 | Config set: /SecInterp/preview_height = 600
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-129555004726208 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-129555004726208 | Config set: /SecInterp/export_quality = 95
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-129555004726208 | Config set: /SecInterp/auto_lod = True
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-129555004726208 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 12:31:11 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-129555004726208 | Configuration reset to defaults
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-129555004726208 | Config set: /SecInterp/scale = 200.0
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-129555004726208 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-129555004726208 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:31:11 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-129555004726208 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:31:12 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-129555004726208 | Test Title: Test Message
2026-01-01 12:31:12 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-129555004726208 | Test Title: Test Message
2026-01-01 12:31:12 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-129555004726208 | Test Title: Test Message
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-123544550304704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123544550304704 | Config set: /SecInterp/scale = 500.0
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123544550304704 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123544550304704 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123544550304704 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123544550304704 | Config set: /SecInterp/last_output_dir =
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123544550304704 | Config set: /SecInterp/dpi = 300
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123544550304704 | Config set: /SecInterp/preview_width = 800
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123544550304704 | Config set: /SecInterp/preview_height = 600
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123544550304704 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123544550304704 | Config set: /SecInterp/export_quality = 95
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123544550304704 | Config set: /SecInterp/auto_lod = True
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123544550304704 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 12:32:15 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-123544550304704 | Configuration reset to defaults
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123544550304704 | Config set: /SecInterp/scale = 200.0
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-123544550304704 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-123544550304704 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:32:15 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-123544550304704 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:32:15 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-123544550304704 | Test Title: Test Message
2026-01-01 12:32:15 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-123544550304704 | Test Title: Test Message
2026-01-01 12:32:15 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-123544550304704 | Test Title: Test Message
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-132720443001792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132720443001792 | Config set: /SecInterp/scale = 500.0
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132720443001792 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132720443001792 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132720443001792 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132720443001792 | Config set: /SecInterp/last_output_dir =
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132720443001792 | Config set: /SecInterp/dpi = 300
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132720443001792 | Config set: /SecInterp/preview_width = 800
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132720443001792 | Config set: /SecInterp/preview_height = 600
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132720443001792 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132720443001792 | Config set: /SecInterp/export_quality = 95
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132720443001792 | Config set: /SecInterp/auto_lod = True
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132720443001792 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 12:32:59 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-132720443001792 | Configuration reset to defaults
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132720443001792 | Config set: /SecInterp/scale = 200.0
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-132720443001792 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-132720443001792 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:32:59 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-132720443001792 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:32:59 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-132720443001792 | Test Title: Test Message
2026-01-01 12:32:59 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-132720443001792 | Test Title: Test Message
2026-01-01 12:32:59 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-132720443001792 | Test Title: Test Message
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:34 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-130901775326144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:34:35 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130901775326144 | Config set: /SecInterp/scale = 500.0
2026-01-01 12:34:35 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130901775326144 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 12:34:35 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130901775326144 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 12:34:35 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130901775326144 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 12:34:35 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130901775326144 | Config set: /SecInterp/last_output_dir =
2026-01-01 12:34:35 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130901775326144 | Config set: /SecInterp/dpi = 300
2026-01-01 12:34:35 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130901775326144 | Config set: /SecInterp/preview_width = 800
2026-01-01 12:34:35 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130901775326144 | Config set: /SecInterp/preview_height = 600
2026-01-01 12:34:35 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130901775326144 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 12:34:35 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130901775326144 | Config set: /SecInterp/export_quality = 95
2026-01-01 12:34:35 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130901775326144 | Config set: /SecInterp/auto_lod = True
2026-01-01 12:34:35 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130901775326144 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 12:34:35 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-130901775326144 | Configuration reset to defaults
2026-01-01 12:34:35 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130901775326144 | Config set: /SecInterp/scale = 200.0
2026-01-01 12:34:35 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-130901775326144 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:34:35 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-130901775326144 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:34:35 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-130901775326144 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:34:35 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-130901775326144 | Test Title: Test Message
2026-01-01 12:34:35 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-130901775326144 | Test Title: Test Message
2026-01-01 12:34:35 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-130901775326144 | Test Title: Test Message
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-129780062997440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-129780062997440 | Config set: /SecInterp/scale = 500.0
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-129780062997440 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-129780062997440 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-129780062997440 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-129780062997440 | Config set: /SecInterp/last_output_dir =
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-129780062997440 | Config set: /SecInterp/dpi = 300
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-129780062997440 | Config set: /SecInterp/preview_width = 800
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-129780062997440 | Config set: /SecInterp/preview_height = 600
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-129780062997440 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-129780062997440 | Config set: /SecInterp/export_quality = 95
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-129780062997440 | Config set: /SecInterp/auto_lod = True
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-129780062997440 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 12:35:26 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-129780062997440 | Configuration reset to defaults
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-129780062997440 | Config set: /SecInterp/scale = 200.0
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-129780062997440 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-129780062997440 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:35:26 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-129780062997440 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:35:26 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-129780062997440 | Test Title: Test Message
2026-01-01 12:35:26 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-129780062997440 | Test Title: Test Message
2026-01-01 12:35:26 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-129780062997440 | Test Title: Test Message
2026-01-01 12:35:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-127434726595520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-127434726595520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:59 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-127434726595520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:59 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-127434726595520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:59 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-127434726595520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:59 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-127434726595520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:59 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-127434726595520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:59 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-127434726595520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:59 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-127434726595520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:59 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-127434726595520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:59 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-127434726595520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:59 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-127434726595520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:59 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-127434726595520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-127434726595520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:59 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-127434726595520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:59 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-127434726595520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:59 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-127434726595520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:59 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-127434726595520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:59 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-127434726595520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:59 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-127434726595520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-127434726595520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:59 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-127434726595520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:59 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-127434726595520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-127434726595520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-127434726595520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:59 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-127434726595520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-127434726595520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:59 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-127434726595520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:59 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-127434726595520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-127434726595520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:59 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-127434726595520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:59 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-127434726595520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:35:59 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-127434726595520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:38:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-136331482999744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:38:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-136331482999744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:38:13 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-136331482999744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:38:13 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-136331482999744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:38:13 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-136331482999744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:38:13 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-136331482999744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:38:13 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-136331482999744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:38:13 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-136331482999744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:38:13 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-136331482999744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:38:13 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-136331482999744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:38:13 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-136331482999744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:38:13 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-136331482999744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:38:13 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-136331482999744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:38:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-136331482999744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:38:13 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-136331482999744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:38:13 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-136331482999744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:38:13 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-136331482999744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:38:13 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-136331482999744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:38:13 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-136331482999744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:38:13 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-136331482999744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:38:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-136331482999744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:38:13 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-136331482999744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:38:13 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-136331482999744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:38:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-136331482999744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:38:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-136331482999744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:38:13 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-136331482999744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:38:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-136331482999744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:38:13 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-136331482999744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:38:13 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-136331482999744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:38:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-136331482999744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:38:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-136331482999744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:38:13 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-136331482999744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:38:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-136331482999744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:39:27 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-124879925521344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:39:27 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-124879925521344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:39:27 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-124879925521344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:39:27 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-124879925521344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:39:27 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-124879925521344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:39:27 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-124879925521344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:39:27 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-124879925521344 | Config set: /SecInterp/scale = 500.0
2026-01-01 12:39:27 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-124879925521344 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 12:39:27 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-124879925521344 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 12:39:27 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-124879925521344 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 12:39:27 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-124879925521344 | Config set: /SecInterp/last_output_dir =
2026-01-01 12:39:27 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-124879925521344 | Config set: /SecInterp/dpi = 300
2026-01-01 12:39:27 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-124879925521344 | Config set: /SecInterp/preview_width = 800
2026-01-01 12:39:27 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-124879925521344 | Config set: /SecInterp/preview_height = 600
2026-01-01 12:39:27 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-124879925521344 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 12:39:27 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-124879925521344 | Config set: /SecInterp/export_quality = 95
2026-01-01 12:39:27 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-124879925521344 | Config set: /SecInterp/auto_lod = True
2026-01-01 12:39:27 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-124879925521344 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 12:39:27 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-124879925521344 | Configuration reset to defaults
2026-01-01 12:39:27 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-124879925521344 | Config set: /SecInterp/scale = 200.0
2026-01-01 12:39:27 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-124879925521344 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:39:27 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-124879925521344 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:39:27 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-124879925521344 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:40:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:17 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:17 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:17 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:17 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:17 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:17 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:17 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:17 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:17 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:17 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:17 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:17 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:17 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:17 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:17 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:17 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:17 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:17 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:17 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:17 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:18 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:18 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:18 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:18 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:18 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:18 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:18 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:18 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:18 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:18 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-125560551885760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:40:18 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125560551885760 | Config set: /SecInterp/scale = 500.0
2026-01-01 12:40:18 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125560551885760 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 12:40:18 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125560551885760 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 12:40:18 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125560551885760 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 12:40:18 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125560551885760 | Config set: /SecInterp/last_output_dir =
2026-01-01 12:40:18 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125560551885760 | Config set: /SecInterp/dpi = 300
2026-01-01 12:40:18 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125560551885760 | Config set: /SecInterp/preview_width = 800
2026-01-01 12:40:18 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125560551885760 | Config set: /SecInterp/preview_height = 600
2026-01-01 12:40:18 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125560551885760 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 12:40:18 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125560551885760 | Config set: /SecInterp/export_quality = 95
2026-01-01 12:40:18 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125560551885760 | Config set: /SecInterp/auto_lod = True
2026-01-01 12:40:18 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125560551885760 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 12:40:18 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-125560551885760 | Configuration reset to defaults
2026-01-01 12:40:18 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125560551885760 | Config set: /SecInterp/scale = 200.0
2026-01-01 12:40:18 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-125560551885760 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:40:18 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-125560551885760 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:40:18 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-125560551885760 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:40:18 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-125560551885760 | Test Title: Test Message
2026-01-01 12:40:18 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-125560551885760 | Test Title: Test Message
2026-01-01 12:40:18 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-125560551885760 | Test Title: Test Message
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-132786091211712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132786091211712 | Config set: /SecInterp/scale = 500.0
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132786091211712 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132786091211712 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132786091211712 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132786091211712 | Config set: /SecInterp/last_output_dir =
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132786091211712 | Config set: /SecInterp/dpi = 300
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132786091211712 | Config set: /SecInterp/preview_width = 800
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132786091211712 | Config set: /SecInterp/preview_height = 600
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132786091211712 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132786091211712 | Config set: /SecInterp/export_quality = 95
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132786091211712 | Config set: /SecInterp/auto_lod = True
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132786091211712 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 12:41:23 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-132786091211712 | Configuration reset to defaults
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132786091211712 | Config set: /SecInterp/scale = 200.0
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-132786091211712 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-132786091211712 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:41:23 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-132786091211712 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:41:23 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-132786091211712 | Test Title: Test Message
2026-01-01 12:41:23 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-132786091211712 | Test Title: Test Message
2026-01-01 12:41:23 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-132786091211712 | Test Title: Test Message
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-140378028874688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-140378028874688 | Config set: /SecInterp/scale = 500.0
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-140378028874688 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-140378028874688 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-140378028874688 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-140378028874688 | Config set: /SecInterp/last_output_dir =
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-140378028874688 | Config set: /SecInterp/dpi = 300
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-140378028874688 | Config set: /SecInterp/preview_width = 800
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-140378028874688 | Config set: /SecInterp/preview_height = 600
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-140378028874688 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-140378028874688 | Config set: /SecInterp/export_quality = 95
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-140378028874688 | Config set: /SecInterp/auto_lod = True
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-140378028874688 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 12:42:46 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-140378028874688 | Configuration reset to defaults
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-140378028874688 | Config set: /SecInterp/scale = 200.0
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-140378028874688 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-140378028874688 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:42:46 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-140378028874688 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:42:47 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-140378028874688 | Test Title: Test Message
2026-01-01 12:42:47 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-140378028874688 | Test Title: Test Message
2026-01-01 12:42:47 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-140378028874688 | Test Title: Test Message
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:28 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-132306180111296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-131844064201664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-131844064201664 | Config set: /SecInterp/scale = 500.0
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-131844064201664 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-131844064201664 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-131844064201664 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-131844064201664 | Config set: /SecInterp/last_output_dir =
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-131844064201664 | Config set: /SecInterp/dpi = 300
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-131844064201664 | Config set: /SecInterp/preview_width = 800
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-131844064201664 | Config set: /SecInterp/preview_height = 600
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-131844064201664 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-131844064201664 | Config set: /SecInterp/export_quality = 95
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-131844064201664 | Config set: /SecInterp/auto_lod = True
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-131844064201664 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 12:43:58 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-131844064201664 | Configuration reset to defaults
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-131844064201664 | Config set: /SecInterp/scale = 200.0
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-131844064201664 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-131844064201664 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:43:58 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-131844064201664 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:43:59 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-131844064201664 | Test Title: Test Message
2026-01-01 12:43:59 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-131844064201664 | Test Title: Test Message
2026-01-01 12:43:59 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-131844064201664 | Test Title: Test Message
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-137465798667200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137465798667200 | Config set: /SecInterp/scale = 500.0
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137465798667200 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137465798667200 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137465798667200 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137465798667200 | Config set: /SecInterp/last_output_dir =
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137465798667200 | Config set: /SecInterp/dpi = 300
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137465798667200 | Config set: /SecInterp/preview_width = 800
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137465798667200 | Config set: /SecInterp/preview_height = 600
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137465798667200 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137465798667200 | Config set: /SecInterp/export_quality = 95
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137465798667200 | Config set: /SecInterp/auto_lod = True
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137465798667200 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 12:44:36 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-137465798667200 | Configuration reset to defaults
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137465798667200 | Config set: /SecInterp/scale = 200.0
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-137465798667200 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-137465798667200 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:44:36 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-137465798667200 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:44:36 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-137465798667200 | Test Title: Test Message
2026-01-01 12:44:36 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-137465798667200 | Test Title: Test Message
2026-01-01 12:44:36 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-137465798667200 | Test Title: Test Message
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-132793513429952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132793513429952 | Config set: /SecInterp/scale = 500.0
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132793513429952 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132793513429952 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132793513429952 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132793513429952 | Config set: /SecInterp/last_output_dir =
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132793513429952 | Config set: /SecInterp/dpi = 300
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132793513429952 | Config set: /SecInterp/preview_width = 800
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132793513429952 | Config set: /SecInterp/preview_height = 600
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132793513429952 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132793513429952 | Config set: /SecInterp/export_quality = 95
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132793513429952 | Config set: /SecInterp/auto_lod = True
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132793513429952 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 12:45:30 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-132793513429952 | Configuration reset to defaults
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132793513429952 | Config set: /SecInterp/scale = 200.0
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-132793513429952 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-132793513429952 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:45:30 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-132793513429952 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:45:30 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-132793513429952 | Test Title: Test Message
2026-01-01 12:45:30 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-132793513429952 | Test Title: Test Message
2026-01-01 12:45:30 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-132793513429952 | Test Title: Test Message
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-124678932335552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-124678932335552 | Config set: /SecInterp/scale = 500.0
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-124678932335552 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-124678932335552 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-124678932335552 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-124678932335552 | Config set: /SecInterp/last_output_dir =
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-124678932335552 | Config set: /SecInterp/dpi = 300
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-124678932335552 | Config set: /SecInterp/preview_width = 800
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-124678932335552 | Config set: /SecInterp/preview_height = 600
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-124678932335552 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-124678932335552 | Config set: /SecInterp/export_quality = 95
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-124678932335552 | Config set: /SecInterp/auto_lod = True
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-124678932335552 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 12:46:02 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-124678932335552 | Configuration reset to defaults
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-124678932335552 | Config set: /SecInterp/scale = 200.0
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-124678932335552 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-124678932335552 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:46:02 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-124678932335552 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:46:02 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-124678932335552 | Test Title: Test Message
2026-01-01 12:46:02 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-124678932335552 | Test Title: Test Message
2026-01-01 12:46:02 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-124678932335552 | Test Title: Test Message
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-134998910045120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134998910045120 | Config set: /SecInterp/scale = 500.0
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134998910045120 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134998910045120 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134998910045120 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134998910045120 | Config set: /SecInterp/last_output_dir =
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134998910045120 | Config set: /SecInterp/dpi = 300
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134998910045120 | Config set: /SecInterp/preview_width = 800
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134998910045120 | Config set: /SecInterp/preview_height = 600
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134998910045120 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134998910045120 | Config set: /SecInterp/export_quality = 95
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134998910045120 | Config set: /SecInterp/auto_lod = True
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134998910045120 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 12:46:41 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-134998910045120 | Configuration reset to defaults
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134998910045120 | Config set: /SecInterp/scale = 200.0
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-134998910045120 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-134998910045120 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:46:41 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-134998910045120 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:46:41 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-134998910045120 | Test Title: Test Message
2026-01-01 12:46:41 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-134998910045120 | Test Title: Test Message
2026-01-01 12:46:41 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-134998910045120 | Test Title: Test Message
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-123579832335296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123579832335296 | Config set: /SecInterp/scale = 500.0
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123579832335296 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123579832335296 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123579832335296 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123579832335296 | Config set: /SecInterp/last_output_dir =
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123579832335296 | Config set: /SecInterp/dpi = 300
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123579832335296 | Config set: /SecInterp/preview_width = 800
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123579832335296 | Config set: /SecInterp/preview_height = 600
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123579832335296 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123579832335296 | Config set: /SecInterp/export_quality = 95
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123579832335296 | Config set: /SecInterp/auto_lod = True
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123579832335296 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 12:47:07 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-123579832335296 | Configuration reset to defaults
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123579832335296 | Config set: /SecInterp/scale = 200.0
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-123579832335296 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-123579832335296 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:47:07 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-123579832335296 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:47:07 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-123579832335296 | Test Title: Test Message
2026-01-01 12:47:07 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-123579832335296 | Test Title: Test Message
2026-01-01 12:47:07 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-123579832335296 | Test Title: Test Message
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-130127934979008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130127934979008 | Config set: /SecInterp/scale = 500.0
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130127934979008 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130127934979008 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130127934979008 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130127934979008 | Config set: /SecInterp/last_output_dir =
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130127934979008 | Config set: /SecInterp/dpi = 300
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130127934979008 | Config set: /SecInterp/preview_width = 800
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130127934979008 | Config set: /SecInterp/preview_height = 600
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130127934979008 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130127934979008 | Config set: /SecInterp/export_quality = 95
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130127934979008 | Config set: /SecInterp/auto_lod = True
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130127934979008 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 12:47:36 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-130127934979008 | Configuration reset to defaults
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130127934979008 | Config set: /SecInterp/scale = 200.0
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-130127934979008 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-130127934979008 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:47:36 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-130127934979008 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:47:36 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-130127934979008 | Test Title: Test Message
2026-01-01 12:47:36 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-130127934979008 | Test Title: Test Message
2026-01-01 12:47:36 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-130127934979008 | Test Title: Test Message
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-134404847463360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134404847463360 | Config set: /SecInterp/scale = 500.0
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134404847463360 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134404847463360 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134404847463360 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134404847463360 | Config set: /SecInterp/last_output_dir =
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134404847463360 | Config set: /SecInterp/dpi = 300
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134404847463360 | Config set: /SecInterp/preview_width = 800
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134404847463360 | Config set: /SecInterp/preview_height = 600
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134404847463360 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134404847463360 | Config set: /SecInterp/export_quality = 95
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134404847463360 | Config set: /SecInterp/auto_lod = True
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134404847463360 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 12:48:05 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-134404847463360 | Configuration reset to defaults
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134404847463360 | Config set: /SecInterp/scale = 200.0
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-134404847463360 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-134404847463360 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:48:05 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-134404847463360 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:48:05 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-134404847463360 | Test Title: Test Message
2026-01-01 12:48:05 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-134404847463360 | Test Title: Test Message
2026-01-01 12:48:05 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-134404847463360 | Test Title: Test Message
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-136603994172352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-136603994172352 | Config set: /SecInterp/scale = 500.0
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-136603994172352 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-136603994172352 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-136603994172352 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-136603994172352 | Config set: /SecInterp/last_output_dir =
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-136603994172352 | Config set: /SecInterp/dpi = 300
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-136603994172352 | Config set: /SecInterp/preview_width = 800
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-136603994172352 | Config set: /SecInterp/preview_height = 600
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-136603994172352 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-136603994172352 | Config set: /SecInterp/export_quality = 95
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-136603994172352 | Config set: /SecInterp/auto_lod = True
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-136603994172352 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 12:48:29 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-136603994172352 | Configuration reset to defaults
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-136603994172352 | Config set: /SecInterp/scale = 200.0
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-136603994172352 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-136603994172352 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:48:29 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-136603994172352 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:48:29 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-136603994172352 | Test Title: Test Message
2026-01-01 12:48:29 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-136603994172352 | Test Title: Test Message
2026-01-01 12:48:29 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-136603994172352 | Test Title: Test Message
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-127398522510272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-127398522510272 | Config set: /SecInterp/scale = 500.0
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-127398522510272 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-127398522510272 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-127398522510272 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-127398522510272 | Config set: /SecInterp/last_output_dir =
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-127398522510272 | Config set: /SecInterp/dpi = 300
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-127398522510272 | Config set: /SecInterp/preview_width = 800
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-127398522510272 | Config set: /SecInterp/preview_height = 600
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-127398522510272 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-127398522510272 | Config set: /SecInterp/export_quality = 95
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-127398522510272 | Config set: /SecInterp/auto_lod = True
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-127398522510272 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 12:48:49 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-127398522510272 | Configuration reset to defaults
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-127398522510272 | Config set: /SecInterp/scale = 200.0
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-127398522510272 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-127398522510272 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:48:49 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-127398522510272 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:48:49 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-127398522510272 | Test Title: Test Message
2026-01-01 12:48:49 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-127398522510272 | Test Title: Test Message
2026-01-01 12:48:49 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-127398522510272 | Test Title: Test Message
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-125606416608192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125606416608192 | Config set: /SecInterp/scale = 500.0
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125606416608192 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125606416608192 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125606416608192 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125606416608192 | Config set: /SecInterp/last_output_dir =
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125606416608192 | Config set: /SecInterp/dpi = 300
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125606416608192 | Config set: /SecInterp/preview_width = 800
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125606416608192 | Config set: /SecInterp/preview_height = 600
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125606416608192 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125606416608192 | Config set: /SecInterp/export_quality = 95
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125606416608192 | Config set: /SecInterp/auto_lod = True
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125606416608192 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 12:49:15 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-125606416608192 | Configuration reset to defaults
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125606416608192 | Config set: /SecInterp/scale = 200.0
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-125606416608192 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-125606416608192 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:49:15 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-125606416608192 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:49:15 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-125606416608192 | Test Title: Test Message
2026-01-01 12:49:15 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-125606416608192 | Test Title: Test Message
2026-01-01 12:49:15 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-125606416608192 | Test Title: Test Message
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-137179666435008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137179666435008 | Config set: /SecInterp/scale = 500.0
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137179666435008 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137179666435008 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137179666435008 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137179666435008 | Config set: /SecInterp/last_output_dir =
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137179666435008 | Config set: /SecInterp/dpi = 300
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137179666435008 | Config set: /SecInterp/preview_width = 800
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137179666435008 | Config set: /SecInterp/preview_height = 600
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137179666435008 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137179666435008 | Config set: /SecInterp/export_quality = 95
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137179666435008 | Config set: /SecInterp/auto_lod = True
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137179666435008 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 12:49:40 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-137179666435008 | Configuration reset to defaults
2026-01-01 12:49:40 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137179666435008 | Config set: /SecInterp/scale = 200.0
2026-01-01 12:49:41 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-137179666435008 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:49:41 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-137179666435008 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:49:41 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-137179666435008 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:49:41 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-137179666435008 | Test Title: Test Message
2026-01-01 12:49:41 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-137179666435008 | Test Title: Test Message
2026-01-01 12:49:41 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-137179666435008 | Test Title: Test Message
2026-01-01 12:50:02 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:02 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:02 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:02 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:02 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:02 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:02 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:02 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:02 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:02 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:02 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:02 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:02 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:02 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:02 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:02 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:02 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:02 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:02 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:02 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:02 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:02 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:02 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:02 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:02 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:02 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:02 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:02 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:03 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:03 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:03 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:03 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-134048123988928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:03 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134048123988928 | Config set: /SecInterp/scale = 500.0
2026-01-01 12:50:03 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134048123988928 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 12:50:03 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134048123988928 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 12:50:03 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134048123988928 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 12:50:03 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134048123988928 | Config set: /SecInterp/last_output_dir =
2026-01-01 12:50:03 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134048123988928 | Config set: /SecInterp/dpi = 300
2026-01-01 12:50:03 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134048123988928 | Config set: /SecInterp/preview_width = 800
2026-01-01 12:50:03 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134048123988928 | Config set: /SecInterp/preview_height = 600
2026-01-01 12:50:03 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134048123988928 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 12:50:03 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134048123988928 | Config set: /SecInterp/export_quality = 95
2026-01-01 12:50:03 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134048123988928 | Config set: /SecInterp/auto_lod = True
2026-01-01 12:50:03 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134048123988928 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 12:50:03 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-134048123988928 | Configuration reset to defaults
2026-01-01 12:50:03 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134048123988928 | Config set: /SecInterp/scale = 200.0
2026-01-01 12:50:03 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-134048123988928 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:50:03 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-134048123988928 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:50:03 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-134048123988928 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:50:03 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-134048123988928 | Test Title: Test Message
2026-01-01 12:50:03 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-134048123988928 | Test Title: Test Message
2026-01-01 12:50:03 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-134048123988928 | Test Title: Test Message
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-133390104689600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-133390104689600 | Config set: /SecInterp/scale = 500.0
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-133390104689600 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-133390104689600 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-133390104689600 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-133390104689600 | Config set: /SecInterp/last_output_dir =
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-133390104689600 | Config set: /SecInterp/dpi = 300
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-133390104689600 | Config set: /SecInterp/preview_width = 800
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-133390104689600 | Config set: /SecInterp/preview_height = 600
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-133390104689600 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-133390104689600 | Config set: /SecInterp/export_quality = 95
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-133390104689600 | Config set: /SecInterp/auto_lod = True
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-133390104689600 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 12:50:28 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-133390104689600 | Configuration reset to defaults
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-133390104689600 | Config set: /SecInterp/scale = 200.0
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-133390104689600 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-133390104689600 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:50:28 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-133390104689600 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:50:29 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-133390104689600 | Test Title: Test Message
2026-01-01 12:50:29 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-133390104689600 | Test Title: Test Message
2026-01-01 12:50:29 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-133390104689600 | Test Title: Test Message
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-127354756545472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-127354756545472 | Config set: /SecInterp/scale = 500.0
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-127354756545472 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-127354756545472 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-127354756545472 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-127354756545472 | Config set: /SecInterp/last_output_dir =
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-127354756545472 | Config set: /SecInterp/dpi = 300
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-127354756545472 | Config set: /SecInterp/preview_width = 800
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-127354756545472 | Config set: /SecInterp/preview_height = 600
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-127354756545472 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-127354756545472 | Config set: /SecInterp/export_quality = 95
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-127354756545472 | Config set: /SecInterp/auto_lod = True
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-127354756545472 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 12:50:57 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-127354756545472 | Configuration reset to defaults
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-127354756545472 | Config set: /SecInterp/scale = 200.0
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-127354756545472 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-127354756545472 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:50:57 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-127354756545472 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:50:57 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-127354756545472 | Test Title: Test Message
2026-01-01 12:50:57 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-127354756545472 | Test Title: Test Message
2026-01-01 12:50:57 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-127354756545472 | Test Title: Test Message
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-134390630321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134390630321088 | Config set: /SecInterp/scale = 500.0
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134390630321088 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134390630321088 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134390630321088 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134390630321088 | Config set: /SecInterp/last_output_dir =
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134390630321088 | Config set: /SecInterp/dpi = 300
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134390630321088 | Config set: /SecInterp/preview_width = 800
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134390630321088 | Config set: /SecInterp/preview_height = 600
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134390630321088 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134390630321088 | Config set: /SecInterp/export_quality = 95
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134390630321088 | Config set: /SecInterp/auto_lod = True
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134390630321088 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 12:51:17 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-134390630321088 | Configuration reset to defaults
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134390630321088 | Config set: /SecInterp/scale = 200.0
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-134390630321088 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-134390630321088 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:51:17 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-134390630321088 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:51:18 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-134390630321088 | Test Title: Test Message
2026-01-01 12:51:18 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-134390630321088 | Test Title: Test Message
2026-01-01 12:51:18 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-134390630321088 | Test Title: Test Message
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-136515977354176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-136515977354176 | Config set: /SecInterp/scale = 500.0
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-136515977354176 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-136515977354176 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-136515977354176 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-136515977354176 | Config set: /SecInterp/last_output_dir =
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-136515977354176 | Config set: /SecInterp/dpi = 300
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-136515977354176 | Config set: /SecInterp/preview_width = 800
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-136515977354176 | Config set: /SecInterp/preview_height = 600
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-136515977354176 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-136515977354176 | Config set: /SecInterp/export_quality = 95
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-136515977354176 | Config set: /SecInterp/auto_lod = True
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-136515977354176 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 12:51:49 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-136515977354176 | Configuration reset to defaults
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-136515977354176 | Config set: /SecInterp/scale = 200.0
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-136515977354176 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-136515977354176 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:51:49 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-136515977354176 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:51:49 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-136515977354176 | Test Title: Test Message
2026-01-01 12:51:49 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-136515977354176 | Test Title: Test Message
2026-01-01 12:51:49 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-136515977354176 | Test Title: Test Message
2026-01-01 12:52:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:11 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:11 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:11 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:11 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:11 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:11 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:11 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:11 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-132263688047552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132263688047552 | Config set: /SecInterp/scale = 500.0
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132263688047552 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132263688047552 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132263688047552 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132263688047552 | Config set: /SecInterp/last_output_dir =
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132263688047552 | Config set: /SecInterp/dpi = 300
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132263688047552 | Config set: /SecInterp/preview_width = 800
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132263688047552 | Config set: /SecInterp/preview_height = 600
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132263688047552 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132263688047552 | Config set: /SecInterp/export_quality = 95
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132263688047552 | Config set: /SecInterp/auto_lod = True
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132263688047552 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 12:52:12 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-132263688047552 | Configuration reset to defaults
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-132263688047552 | Config set: /SecInterp/scale = 200.0
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-132263688047552 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-132263688047552 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:52:12 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-132263688047552 | CacheService initialized (Default TTL: 3600s)
2026-01-01 12:52:12 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:374 | Thread-132263688047552 | Cache cleared by user
2026-01-01 12:52:12 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-132263688047552 | Test Title: Test Message
2026-01-01 12:52:12 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-132263688047552 | Test Title: Test Message
2026-01-01 12:52:12 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-132263688047552 | Test Title: Test Message
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-135019957308352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-135019957308352 | Config set: /SecInterp/scale = 500.0
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-135019957308352 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-135019957308352 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-135019957308352 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-135019957308352 | Config set: /SecInterp/last_output_dir =
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-135019957308352 | Config set: /SecInterp/dpi = 300
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-135019957308352 | Config set: /SecInterp/preview_width = 800
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-135019957308352 | Config set: /SecInterp/preview_height = 600
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-135019957308352 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-135019957308352 | Config set: /SecInterp/export_quality = 95
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-135019957308352 | Config set: /SecInterp/auto_lod = True
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-135019957308352 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 13:00:32 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-135019957308352 | Configuration reset to defaults
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-135019957308352 | Config set: /SecInterp/scale = 200.0
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-135019957308352 | CacheService initialized (Default TTL: 3600s)
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-135019957308352 | CacheService initialized (Default TTL: 3600s)
2026-01-01 13:00:32 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-135019957308352 | CacheService initialized (Default TTL: 3600s)
2026-01-01 13:00:32 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:374 | Thread-135019957308352 | Cache cleared by user
2026-01-01 13:00:32 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-135019957308352 | Test Title: Test Message
2026-01-01 13:00:32 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-135019957308352 | Test Title: Test Message
2026-01-01 13:00:32 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-135019957308352 | Test Title: Test Message
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-125956412263360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125956412263360 | Config set: /SecInterp/scale = 500.0
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125956412263360 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125956412263360 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125956412263360 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125956412263360 | Config set: /SecInterp/last_output_dir =
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125956412263360 | Config set: /SecInterp/dpi = 300
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125956412263360 | Config set: /SecInterp/preview_width = 800
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125956412263360 | Config set: /SecInterp/preview_height = 600
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125956412263360 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125956412263360 | Config set: /SecInterp/export_quality = 95
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125956412263360 | Config set: /SecInterp/auto_lod = True
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125956412263360 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 13:01:17 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-125956412263360 | Configuration reset to defaults
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-125956412263360 | Config set: /SecInterp/scale = 200.0
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-125956412263360 | CacheService initialized (Default TTL: 3600s)
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-125956412263360 | CacheService initialized (Default TTL: 3600s)
2026-01-01 13:01:17 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-125956412263360 | CacheService initialized (Default TTL: 3600s)
2026-01-01 13:01:17 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:374 | Thread-125956412263360 | Cache cleared by user
2026-01-01 13:01:17 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-125956412263360 | Test Title: Test Message
2026-01-01 13:01:17 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-125956412263360 | Test Title: Test Message
2026-01-01 13:01:17 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-125956412263360 | Test Title: Test Message
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-130556993940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130556993940416 | Config set: /SecInterp/scale = 500.0
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130556993940416 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130556993940416 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130556993940416 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130556993940416 | Config set: /SecInterp/last_output_dir =
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130556993940416 | Config set: /SecInterp/dpi = 300
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130556993940416 | Config set: /SecInterp/preview_width = 800
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130556993940416 | Config set: /SecInterp/preview_height = 600
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130556993940416 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130556993940416 | Config set: /SecInterp/export_quality = 95
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130556993940416 | Config set: /SecInterp/auto_lod = True
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130556993940416 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 13:14:13 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-130556993940416 | Configuration reset to defaults
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130556993940416 | Config set: /SecInterp/scale = 200.0
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-130556993940416 | CacheService initialized (Default TTL: 3600s)
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-130556993940416 | CacheService initialized (Default TTL: 3600s)
2026-01-01 13:14:13 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-130556993940416 | CacheService initialized (Default TTL: 3600s)
2026-01-01 13:14:13 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:374 | Thread-130556993940416 | Cache cleared by user
2026-01-01 13:14:13 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-130556993940416 | Test Title: Test Message
2026-01-01 13:14:13 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-130556993940416 | Test Title: Test Message
2026-01-01 13:14:13 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-130556993940416 | Test Title: Test Message
2026-01-01 13:18:19 | DEBUG    | SecInterp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-127544432057280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:18:19 | DEBUG    | SecInterp.core.utils.geometry_utils.processing | get_logger:127 | Thread-127544432057280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:18:19 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-127544432057280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:18:19 | DEBUG    | SecInterp.core.utils.sampling | get_logger:127 | Thread-127544432057280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:19:21 | DEBUG    | SecInterp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-139729842244544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:19:21 | DEBUG    | SecInterp.core.utils.geometry_utils.processing | get_logger:127 | Thread-139729842244544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:19:21 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-139729842244544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:19:21 | DEBUG    | SecInterp.core.utils.sampling | get_logger:127 | Thread-139729842244544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:19:42 | DEBUG    | SecInterp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-132941706357696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:19:42 | DEBUG    | SecInterp.core.utils.geometry_utils.processing | get_logger:127 | Thread-132941706357696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:19:42 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-132941706357696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:19:42 | DEBUG    | SecInterp.core.utils.sampling | get_logger:127 | Thread-132941706357696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:20:38 | DEBUG    | SecInterp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-138761686956992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:20:38 | DEBUG    | SecInterp.core.utils.geometry_utils.processing | get_logger:127 | Thread-138761686956992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:20:38 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-138761686956992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:20:38 | DEBUG    | SecInterp.core.utils.sampling | get_logger:127 | Thread-138761686956992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:21:18 | DEBUG    | SecInterp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-123300945775552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:21:18 | DEBUG    | SecInterp.core.utils.geometry_utils.processing | get_logger:127 | Thread-123300945775552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:21:18 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-123300945775552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:21:18 | DEBUG    | SecInterp.core.utils.sampling | get_logger:127 | Thread-123300945775552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:21:37 | DEBUG    | SecInterp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-125982643895232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:21:37 | DEBUG    | SecInterp.core.utils.geometry_utils.processing | get_logger:127 | Thread-125982643895232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:21:37 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-125982643895232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:21:37 | DEBUG    | SecInterp.core.utils.sampling | get_logger:127 | Thread-125982643895232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:22:05 | DEBUG    | SecInterp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-128006507428800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:22:05 | DEBUG    | SecInterp.core.utils.geometry_utils.processing | get_logger:127 | Thread-128006507428800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:22:05 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-128006507428800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:22:05 | DEBUG    | SecInterp.core.utils.sampling | get_logger:127 | Thread-128006507428800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:22:25 | DEBUG    | SecInterp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-135919731657664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:22:25 | DEBUG    | SecInterp.core.utils.geometry_utils.processing | get_logger:127 | Thread-135919731657664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:22:25 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-135919731657664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:22:25 | DEBUG    | SecInterp.core.utils.sampling | get_logger:127 | Thread-135919731657664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:23:34 | DEBUG    | SecInterp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-123480749702080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:23:34 | DEBUG    | SecInterp.core.utils.geometry_utils.processing | get_logger:127 | Thread-123480749702080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:23:34 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-123480749702080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:23:34 | DEBUG    | SecInterp.core.utils.sampling | get_logger:127 | Thread-123480749702080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:23:34 | DEBUG    | SecInterp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-123480749702080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:23:34 | DEBUG    | SecInterp.core.utils.geometry_utils.filtering | filter_features_by_buffer:60 | Thread-123480749702080 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-01 13:23:34 | DEBUG    | SecInterp.core.utils.geometry_utils.optimization | adaptive_sample:165 | Thread-123480749702080 | Adaptive sampling: Avg curvature=176.40, calculated tolerance=0.30
2026-01-01 13:23:34 | DEBUG    | SecInterp.core.utils.geometry_utils.optimization | decimate:67 | Thread-123480749702080 | LOD Decimation: 100 -> 100 points (tol=0.30)
2026-01-01 13:23:34 | DEBUG    | SecInterp.core.utils.geometry_utils.optimization | decimate:67 | Thread-123480749702080 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-01 13:23:34 | DEBUG    | SecInterp.core.utils.geometry_utils.processing | run_geometry_operation:106 | Thread-123480749702080 | Running geometry operation: test
2026-01-01 13:24:46 | DEBUG    | SecInterp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-135582944959424 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:24:46 | DEBUG    | SecInterp.core.utils.geometry_utils.processing | get_logger:127 | Thread-135582944959424 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:24:46 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-135582944959424 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:24:46 | DEBUG    | SecInterp.core.utils.sampling | get_logger:127 | Thread-135582944959424 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:24:46 | DEBUG    | SecInterp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-135582944959424 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:24:46 | DEBUG    | SecInterp.core.utils.geometry_utils.filtering | filter_features_by_buffer:60 | Thread-135582944959424 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-01 13:24:46 | DEBUG    | SecInterp.core.utils.geometry_utils.optimization | adaptive_sample:165 | Thread-135582944959424 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-01 13:24:46 | DEBUG    | SecInterp.core.utils.geometry_utils.optimization | decimate:67 | Thread-135582944959424 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-01 13:24:46 | DEBUG    | SecInterp.core.utils.geometry_utils.optimization | decimate:67 | Thread-135582944959424 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-01 13:24:46 | DEBUG    | SecInterp.core.utils.geometry_utils.processing | run_geometry_operation:106 | Thread-135582944959424 | Running geometry operation: test
2026-01-01 13:25:17 | DEBUG    | SecInterp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-139501795109824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:25:17 | DEBUG    | SecInterp.core.utils.geometry_utils.processing | get_logger:127 | Thread-139501795109824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:25:17 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-139501795109824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:25:17 | DEBUG    | SecInterp.core.utils.sampling | get_logger:127 | Thread-139501795109824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:25:17 | DEBUG    | SecInterp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-139501795109824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:25:17 | DEBUG    | SecInterp.core.utils.geometry_utils.filtering | filter_features_by_buffer:60 | Thread-139501795109824 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-01 13:25:17 | DEBUG    | SecInterp.core.utils.geometry_utils.optimization | adaptive_sample:165 | Thread-139501795109824 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-01 13:25:17 | DEBUG    | SecInterp.core.utils.geometry_utils.optimization | decimate:67 | Thread-139501795109824 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-01 13:25:17 | DEBUG    | SecInterp.core.utils.geometry_utils.optimization | decimate:67 | Thread-139501795109824 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-01 13:25:17 | DEBUG    | SecInterp.core.utils.geometry_utils.processing | run_geometry_operation:106 | Thread-139501795109824 | Running geometry operation: test
2026-01-01 13:25:38 | DEBUG    | SecInterp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-126226707823552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:25:38 | DEBUG    | SecInterp.core.utils.geometry_utils.processing | get_logger:127 | Thread-126226707823552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:25:38 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-126226707823552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:25:38 | DEBUG    | SecInterp.core.utils.sampling | get_logger:127 | Thread-126226707823552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:25:38 | DEBUG    | SecInterp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-126226707823552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:25:38 | DEBUG    | SecInterp.core.utils.geometry_utils.filtering | filter_features_by_buffer:60 | Thread-126226707823552 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-01 13:25:38 | DEBUG    | SecInterp.core.utils.geometry_utils.optimization | adaptive_sample:165 | Thread-126226707823552 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-01 13:25:38 | DEBUG    | SecInterp.core.utils.geometry_utils.optimization | decimate:67 | Thread-126226707823552 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-01 13:25:38 | DEBUG    | SecInterp.core.utils.geometry_utils.optimization | decimate:67 | Thread-126226707823552 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-01 13:25:38 | DEBUG    | SecInterp.core.utils.geometry_utils.processing | run_geometry_operation:106 | Thread-126226707823552 | Running geometry operation: test
2026-01-01 13:26:04 | DEBUG    | SecInterp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-132471951584192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:26:04 | DEBUG    | SecInterp.core.utils.geometry_utils.processing | get_logger:127 | Thread-132471951584192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:26:04 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-132471951584192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:26:04 | DEBUG    | SecInterp.core.utils.sampling | get_logger:127 | Thread-132471951584192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:26:04 | DEBUG    | SecInterp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-132471951584192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:26:04 | DEBUG    | SecInterp.core.utils.geometry_utils.filtering | filter_features_by_buffer:60 | Thread-132471951584192 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-01 13:26:04 | DEBUG    | SecInterp.core.utils.geometry_utils.filtering | filter_features_by_buffer:60 | Thread-132471951584192 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-01 13:26:04 | DEBUG    | SecInterp.core.utils.geometry_utils.optimization | adaptive_sample:165 | Thread-132471951584192 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-01 13:26:04 | DEBUG    | SecInterp.core.utils.geometry_utils.optimization | decimate:67 | Thread-132471951584192 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-01 13:26:04 | DEBUG    | SecInterp.core.utils.geometry_utils.optimization | decimate:67 | Thread-132471951584192 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-01 13:26:04 | DEBUG    | SecInterp.core.utils.geometry_utils.processing | run_geometry_operation:106 | Thread-132471951584192 | Running geometry operation: test
2026-01-01 13:26:43 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-133186103086016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:26:43 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-133186103086016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:26:43 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-133186103086016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:26:43 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-133186103086016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:26:43 | DEBUG    | SecInterp.core.services.drillhole_service | get_logger:127 | Thread-133186103086016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:26:43 | DEBUG    | SecInterp.core.services.geology_service | get_logger:127 | Thread-133186103086016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:26:43 | DEBUG    | SecInterp.core.services.profile_service | get_logger:127 | Thread-133186103086016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:26:43 | DEBUG    | SecInterp.core.services.structure_service | get_logger:127 | Thread-133186103086016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:27:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-126686555417536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:27:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-126686555417536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:27:29 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-126686555417536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:27:29 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-126686555417536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:27:29 | DEBUG    | SecInterp.core.services.drillhole_service | get_logger:127 | Thread-126686555417536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:27:29 | DEBUG    | SecInterp.core.services.geology_service | get_logger:127 | Thread-126686555417536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:27:29 | DEBUG    | SecInterp.core.services.profile_service | get_logger:127 | Thread-126686555417536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:27:29 | DEBUG    | SecInterp.core.services.structure_service | get_logger:127 | Thread-126686555417536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:27:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-138696990919616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:27:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-138696990919616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:27:58 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-138696990919616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:27:58 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-138696990919616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:27:58 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-138696990919616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:27:58 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-138696990919616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:27:58 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-138696990919616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:27:58 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-138696990919616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:27:58 | DEBUG    | SecInterp.core.services.drillhole_service | get_logger:127 | Thread-138696990919616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:27:58 | DEBUG    | SecInterp.core.services.geology_service | get_logger:127 | Thread-138696990919616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:27:58 | DEBUG    | SecInterp.core.services.profile_service | get_logger:127 | Thread-138696990919616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:27:58 | DEBUG    | SecInterp.core.services.structure_service | get_logger:127 | Thread-138696990919616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:27:58 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:79 | Thread-138696990919616 | Projecting collars from Test Layer with buffer 50.0m
2026-01-01 13:27:58 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:115 | Thread-138696990919616 | DrillholeService.project_collars END: Found 1 collars.
2026-01-01 13:28:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-124924351462336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:28:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-124924351462336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:28:17 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-124924351462336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:28:17 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-124924351462336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:28:17 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-124924351462336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:28:17 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-124924351462336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:28:17 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-124924351462336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:28:17 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-124924351462336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:28:17 | DEBUG    | SecInterp.core.services.drillhole_service | get_logger:127 | Thread-124924351462336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:28:17 | DEBUG    | SecInterp.core.services.geology_service | get_logger:127 | Thread-124924351462336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:28:17 | DEBUG    | SecInterp.core.services.profile_service | get_logger:127 | Thread-124924351462336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:28:17 | DEBUG    | SecInterp.core.services.structure_service | get_logger:127 | Thread-124924351462336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:28:17 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:79 | Thread-124924351462336 | Projecting collars from Test Layer with buffer 50.0m
2026-01-01 13:28:17 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:115 | Thread-124924351462336 | DrillholeService.project_collars END: Found 1 collars.
2026-01-01 13:28:39 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-130265846295488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:28:39 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-130265846295488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:28:39 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-130265846295488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:28:39 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-130265846295488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:28:39 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-130265846295488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:28:39 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-130265846295488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:28:39 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-130265846295488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:28:39 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-130265846295488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:28:39 | DEBUG    | SecInterp.core.services.drillhole_service | get_logger:127 | Thread-130265846295488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:28:39 | DEBUG    | SecInterp.core.services.geology_service | get_logger:127 | Thread-130265846295488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:28:39 | DEBUG    | SecInterp.core.services.profile_service | get_logger:127 | Thread-130265846295488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:28:39 | DEBUG    | SecInterp.core.services.structure_service | get_logger:127 | Thread-130265846295488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:28:39 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:79 | Thread-130265846295488 | Projecting collars from Test Layer with buffer 50.0m
2026-01-01 13:28:39 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:115 | Thread-130265846295488 | DrillholeService.project_collars END: Found 1 collars.
2026-01-01 13:29:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-132122301971392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:29:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-132122301971392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:29:16 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-132122301971392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:29:16 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-132122301971392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:29:16 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-132122301971392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:29:16 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-132122301971392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:29:16 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-132122301971392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:29:16 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-132122301971392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:29:16 | DEBUG    | SecInterp.core.services.drillhole_service | get_logger:127 | Thread-132122301971392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:29:16 | DEBUG    | SecInterp.core.services.geology_service | get_logger:127 | Thread-132122301971392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:29:16 | DEBUG    | SecInterp.core.services.profile_service | get_logger:127 | Thread-132122301971392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:29:16 | DEBUG    | SecInterp.core.services.structure_service | get_logger:127 | Thread-132122301971392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:29:16 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:79 | Thread-132122301971392 | Projecting collars from Test Layer with buffer 50.0m
2026-01-01 13:29:16 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:94 | Thread-132122301971392 | No collars found within buffer area.
2026-01-01 13:29:16 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:79 | Thread-132122301971392 | Projecting collars from Test Layer with buffer 50.0m
2026-01-01 13:29:16 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:115 | Thread-132122301971392 | DrillholeService.project_collars END: Found 1 collars.
2026-01-01 13:30:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-133393305328576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:30:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-133393305328576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:30:04 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-133393305328576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:30:04 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-133393305328576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:30:04 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-133393305328576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:30:04 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-133393305328576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:30:04 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-133393305328576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:30:04 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-133393305328576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:30:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-123811109342144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:30:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-123811109342144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:30:24 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-123811109342144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:30:24 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-123811109342144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:30:24 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-123811109342144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:30:24 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-123811109342144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:30:24 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-123811109342144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:30:24 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-123811109342144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:30:24 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:163 | Thread-123811109342144 | Generating master profile with interval=10.00
2026-01-01 13:30:24 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:163 | Thread-123811109342144 | Generating master profile with interval=50.00
2026-01-01 13:30:44 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-126821030091712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:30:44 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-126821030091712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:30:44 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-126821030091712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:30:44 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-126821030091712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:30:44 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-126821030091712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:30:44 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-126821030091712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:30:44 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-126821030091712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:30:44 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-126821030091712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:30:44 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:163 | Thread-126821030091712 | Generating master profile with interval=10.00
2026-01-01 13:30:44 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:163 | Thread-126821030091712 | Generating master profile with interval=50.00
2026-01-01 13:31:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-126381979560896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:31:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-126381979560896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:31:19 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-126381979560896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:31:19 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-126381979560896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:31:19 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-126381979560896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:31:19 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-126381979560896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:31:19 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-126381979560896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:31:19 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-126381979560896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:31:19 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:163 | Thread-126381979560896 | Generating master profile with interval=10.00
2026-01-01 13:31:19 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:133 | Thread-126381979560896 | Generated 1 geological segments
2026-01-01 13:31:19 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:163 | Thread-126381979560896 | Generating master profile with interval=50.00
2026-01-01 13:32:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-131367420394432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:32:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-131367420394432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:32:00 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-131367420394432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:32:00 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-131367420394432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:32:00 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-131367420394432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:32:00 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-131367420394432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:32:00 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-131367420394432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:32:00 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-131367420394432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:32:00 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:155 | Thread-131367420394432 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 153, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-01 13:32:00 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:94 | Thread-131367420394432 | Analyzing structures in Structure Layer with buffer 10m
2026-01-01 13:32:45 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-123971036236736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:32:45 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-123971036236736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:32:45 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-123971036236736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:32:45 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-123971036236736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:32:45 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-123971036236736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:32:45 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-123971036236736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:32:45 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-123971036236736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:32:45 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-123971036236736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:32:45 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:155 | Thread-123971036236736 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 153, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-01 13:32:45 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:94 | Thread-123971036236736 | Analyzing structures in Structure Layer with buffer 10m
2026-01-01 13:32:45 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:127 | Thread-123971036236736 | Processed 1 structural measurements from Structure Layer
2026-01-01 13:33:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:09 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:09 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:09 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:09 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:09 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:09 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:09 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:09 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:09 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:09 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:09 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:09 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:09 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:09 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:09 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:09 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:09 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:09 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:09 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:09 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:09 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:09 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:09 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:10 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:10 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:10 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:10 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:10 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:10 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:10 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:10 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:10 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-138738335370176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:33:10 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-138738335370176 | Config set: /SecInterp/scale = 500.0
2026-01-01 13:33:10 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-138738335370176 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 13:33:10 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-138738335370176 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 13:33:10 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-138738335370176 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 13:33:10 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-138738335370176 | Config set: /SecInterp/last_output_dir =
2026-01-01 13:33:10 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-138738335370176 | Config set: /SecInterp/dpi = 300
2026-01-01 13:33:10 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-138738335370176 | Config set: /SecInterp/preview_width = 800
2026-01-01 13:33:10 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-138738335370176 | Config set: /SecInterp/preview_height = 600
2026-01-01 13:33:10 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-138738335370176 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 13:33:10 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-138738335370176 | Config set: /SecInterp/export_quality = 95
2026-01-01 13:33:10 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-138738335370176 | Config set: /SecInterp/auto_lod = True
2026-01-01 13:33:10 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-138738335370176 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 13:33:10 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-138738335370176 | Configuration reset to defaults
2026-01-01 13:33:10 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-138738335370176 | Config set: /SecInterp/scale = 200.0
2026-01-01 13:33:10 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-138738335370176 | CacheService initialized (Default TTL: 3600s)
2026-01-01 13:33:10 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-138738335370176 | CacheService initialized (Default TTL: 3600s)
2026-01-01 13:33:10 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-138738335370176 | CacheService initialized (Default TTL: 3600s)
2026-01-01 13:33:10 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:79 | Thread-138738335370176 | Projecting collars from Test Layer with buffer 50.0m
2026-01-01 13:33:10 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:94 | Thread-138738335370176 | No collars found within buffer area.
2026-01-01 13:33:10 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:163 | Thread-138738335370176 | Generating master profile with interval=10.00
2026-01-01 13:33:10 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:133 | Thread-138738335370176 | Generated 1 geological segments
2026-01-01 13:33:10 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:163 | Thread-138738335370176 | Generating master profile with interval=50.00
2026-01-01 13:33:10 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:155 | Thread-138738335370176 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 153, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-01 13:33:10 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:94 | Thread-138738335370176 | Analyzing structures in Structure Layer with buffer 10m
2026-01-01 13:33:10 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:127 | Thread-138738335370176 | Processed 1 structural measurements from Structure Layer
2026-01-01 13:33:10 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:374 | Thread-138738335370176 | Cache cleared by user
2026-01-01 13:33:10 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-138738335370176 | Test Title: Test Message
2026-01-01 13:33:10 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-138738335370176 | Test Title: Test Message
2026-01-01 13:33:10 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-138738335370176 | Test Title: Test Message
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-137185769077696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137185769077696 | Config set: /SecInterp/scale = 500.0
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137185769077696 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137185769077696 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137185769077696 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137185769077696 | Config set: /SecInterp/last_output_dir =
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137185769077696 | Config set: /SecInterp/dpi = 300
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137185769077696 | Config set: /SecInterp/preview_width = 800
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137185769077696 | Config set: /SecInterp/preview_height = 600
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137185769077696 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137185769077696 | Config set: /SecInterp/export_quality = 95
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137185769077696 | Config set: /SecInterp/auto_lod = True
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137185769077696 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 13:34:28 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-137185769077696 | Configuration reset to defaults
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-137185769077696 | Config set: /SecInterp/scale = 200.0
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-137185769077696 | CacheService initialized (Default TTL: 3600s)
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-137185769077696 | CacheService initialized (Default TTL: 3600s)
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-137185769077696 | CacheService initialized (Default TTL: 3600s)
2026-01-01 13:34:28 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:79 | Thread-137185769077696 | Projecting collars from Test Layer with buffer 50.0m
2026-01-01 13:34:28 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:94 | Thread-137185769077696 | No collars found within buffer area.
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:163 | Thread-137185769077696 | Generating master profile with interval=10.00
2026-01-01 13:34:28 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:133 | Thread-137185769077696 | Generated 1 geological segments
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:163 | Thread-137185769077696 | Generating master profile with interval=50.00
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:60 | Thread-137185769077696 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:60 | Thread-137185769077696 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:165 | Thread-137185769077696 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:67 | Thread-137185769077696 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:67 | Thread-137185769077696 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-01 13:34:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:106 | Thread-137185769077696 | Running geometry operation: test
2026-01-01 13:34:28 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:155 | Thread-137185769077696 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 153, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-01 13:34:28 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:94 | Thread-137185769077696 | Analyzing structures in Structure Layer with buffer 10m
2026-01-01 13:34:28 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:127 | Thread-137185769077696 | Processed 1 structural measurements from Structure Layer
2026-01-01 13:34:28 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:374 | Thread-137185769077696 | Cache cleared by user
2026-01-01 13:34:28 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-137185769077696 | Test Title: Test Message
2026-01-01 13:34:28 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-137185769077696 | Test Title: Test Message
2026-01-01 13:34:28 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-137185769077696 | Test Title: Test Message
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-128536357649344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-128536357649344 | Config set: /SecInterp/scale = 500.0
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-128536357649344 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-128536357649344 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-128536357649344 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-128536357649344 | Config set: /SecInterp/last_output_dir =
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-128536357649344 | Config set: /SecInterp/dpi = 300
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-128536357649344 | Config set: /SecInterp/preview_width = 800
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-128536357649344 | Config set: /SecInterp/preview_height = 600
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-128536357649344 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-128536357649344 | Config set: /SecInterp/export_quality = 95
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-128536357649344 | Config set: /SecInterp/auto_lod = True
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-128536357649344 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 13:35:06 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-128536357649344 | Configuration reset to defaults
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-128536357649344 | Config set: /SecInterp/scale = 200.0
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-128536357649344 | CacheService initialized (Default TTL: 3600s)
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-128536357649344 | CacheService initialized (Default TTL: 3600s)
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-128536357649344 | CacheService initialized (Default TTL: 3600s)
2026-01-01 13:35:06 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:79 | Thread-128536357649344 | Projecting collars from Test Layer with buffer 50.0m
2026-01-01 13:35:06 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:94 | Thread-128536357649344 | No collars found within buffer area.
2026-01-01 13:35:06 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:79 | Thread-128536357649344 | Projecting collars from Test Layer with buffer 50.0m
2026-01-01 13:35:06 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:115 | Thread-128536357649344 | DrillholeService.project_collars END: Found 1 collars.
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:163 | Thread-128536357649344 | Generating master profile with interval=10.00
2026-01-01 13:35:06 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:133 | Thread-128536357649344 | Generated 1 geological segments
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:163 | Thread-128536357649344 | Generating master profile with interval=50.00
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:60 | Thread-128536357649344 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:60 | Thread-128536357649344 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:165 | Thread-128536357649344 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:67 | Thread-128536357649344 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:67 | Thread-128536357649344 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-01 13:35:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:106 | Thread-128536357649344 | Running geometry operation: test
2026-01-01 13:35:06 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:155 | Thread-128536357649344 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 153, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-01 13:35:06 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:94 | Thread-128536357649344 | Analyzing structures in Structure Layer with buffer 10m
2026-01-01 13:35:06 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:127 | Thread-128536357649344 | Processed 1 structural measurements from Structure Layer
2026-01-01 13:35:06 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:374 | Thread-128536357649344 | Cache cleared by user
2026-01-01 13:35:06 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-128536357649344 | Test Title: Test Message
2026-01-01 13:35:06 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-128536357649344 | Test Title: Test Message
2026-01-01 13:35:06 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-128536357649344 | Test Title: Test Message
2026-01-01 13:35:59 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-123439246535616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:36:52 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-126475697195968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:37:43 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-125603657305024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:38:31 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-138670322060224 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:39:07 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-136355269467072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:39:36 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-131121874332608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:40:03 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-135953917422528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:40:32 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-133983604272064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:14 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-139339146333120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-134970355551168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134970355551168 | Config set: /SecInterp/scale = 500.0
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134970355551168 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134970355551168 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134970355551168 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134970355551168 | Config set: /SecInterp/last_output_dir =
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134970355551168 | Config set: /SecInterp/dpi = 300
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134970355551168 | Config set: /SecInterp/preview_width = 800
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134970355551168 | Config set: /SecInterp/preview_height = 600
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134970355551168 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134970355551168 | Config set: /SecInterp/export_quality = 95
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134970355551168 | Config set: /SecInterp/auto_lod = True
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134970355551168 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 13:41:33 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-134970355551168 | Configuration reset to defaults
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134970355551168 | Config set: /SecInterp/scale = 200.0
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-134970355551168 | CacheService initialized (Default TTL: 3600s)
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-134970355551168 | CacheService initialized (Default TTL: 3600s)
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-134970355551168 | CacheService initialized (Default TTL: 3600s)
2026-01-01 13:41:33 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:79 | Thread-134970355551168 | Projecting collars from Test Layer with buffer 50.0m
2026-01-01 13:41:33 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:94 | Thread-134970355551168 | No collars found within buffer area.
2026-01-01 13:41:33 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:79 | Thread-134970355551168 | Projecting collars from Test Layer with buffer 50.0m
2026-01-01 13:41:33 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:115 | Thread-134970355551168 | DrillholeService.project_collars END: Found 1 collars.
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:163 | Thread-134970355551168 | Generating master profile with interval=10.00
2026-01-01 13:41:33 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:133 | Thread-134970355551168 | Generated 0 geological segments
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:163 | Thread-134970355551168 | Generating master profile with interval=50.00
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:60 | Thread-134970355551168 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:60 | Thread-134970355551168 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:165 | Thread-134970355551168 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:67 | Thread-134970355551168 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:67 | Thread-134970355551168 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-01 13:41:33 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:106 | Thread-134970355551168 | Running geometry operation: test
2026-01-01 13:41:33 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:155 | Thread-134970355551168 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 153, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-01 13:41:33 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:94 | Thread-134970355551168 | Analyzing structures in Structure Layer with buffer 10m
2026-01-01 13:41:33 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:374 | Thread-134970355551168 | Cache cleared by user
2026-01-01 13:41:33 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-134970355551168 | Test Title: Test Message
2026-01-01 13:41:33 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-134970355551168 | Test Title: Test Message
2026-01-01 13:41:33 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-134970355551168 | Test Title: Test Message
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-130803796573120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130803796573120 | Config set: /SecInterp/scale = 500.0
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130803796573120 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130803796573120 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130803796573120 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130803796573120 | Config set: /SecInterp/last_output_dir =
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130803796573120 | Config set: /SecInterp/dpi = 300
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130803796573120 | Config set: /SecInterp/preview_width = 800
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130803796573120 | Config set: /SecInterp/preview_height = 600
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130803796573120 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130803796573120 | Config set: /SecInterp/export_quality = 95
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130803796573120 | Config set: /SecInterp/auto_lod = True
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130803796573120 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 13:42:46 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-130803796573120 | Configuration reset to defaults
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-130803796573120 | Config set: /SecInterp/scale = 200.0
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-130803796573120 | CacheService initialized (Default TTL: 3600s)
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-130803796573120 | CacheService initialized (Default TTL: 3600s)
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-130803796573120 | CacheService initialized (Default TTL: 3600s)
2026-01-01 13:42:46 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:79 | Thread-130803796573120 | Projecting collars from Test Layer with buffer 50.0m
2026-01-01 13:42:46 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:94 | Thread-130803796573120 | No collars found within buffer area.
2026-01-01 13:42:46 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:79 | Thread-130803796573120 | Projecting collars from Test Layer with buffer 50.0m
2026-01-01 13:42:46 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:115 | Thread-130803796573120 | DrillholeService.project_collars END: Found 1 collars.
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:163 | Thread-130803796573120 | Generating master profile with interval=10.00
2026-01-01 13:42:46 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:133 | Thread-130803796573120 | Generated 1 geological segments
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:163 | Thread-130803796573120 | Generating master profile with interval=50.00
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:60 | Thread-130803796573120 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:60 | Thread-130803796573120 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:165 | Thread-130803796573120 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:67 | Thread-130803796573120 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:67 | Thread-130803796573120 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-01 13:42:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:106 | Thread-130803796573120 | Running geometry operation: test
2026-01-01 13:42:46 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:155 | Thread-130803796573120 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 153, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-01 13:42:46 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:94 | Thread-130803796573120 | Analyzing structures in Structure Layer with buffer 10m
2026-01-01 13:42:46 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:127 | Thread-130803796573120 | Processed 1 structural measurements from Structure Layer
2026-01-01 13:42:46 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:374 | Thread-130803796573120 | Cache cleared by user
2026-01-01 13:42:46 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-130803796573120 | Test Title: Test Message
2026-01-01 13:42:46 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-130803796573120 | Test Title: Test Message
2026-01-01 13:42:46 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-130803796573120 | Test Title: Test Message
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-134495425993664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134495425993664 | Config set: /SecInterp/scale = 500.0
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134495425993664 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134495425993664 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134495425993664 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134495425993664 | Config set: /SecInterp/last_output_dir =
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134495425993664 | Config set: /SecInterp/dpi = 300
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134495425993664 | Config set: /SecInterp/preview_width = 800
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134495425993664 | Config set: /SecInterp/preview_height = 600
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134495425993664 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134495425993664 | Config set: /SecInterp/export_quality = 95
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134495425993664 | Config set: /SecInterp/auto_lod = True
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134495425993664 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 13:43:10 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-134495425993664 | Configuration reset to defaults
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-134495425993664 | Config set: /SecInterp/scale = 200.0
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-134495425993664 | CacheService initialized (Default TTL: 3600s)
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-134495425993664 | CacheService initialized (Default TTL: 3600s)
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-134495425993664 | CacheService initialized (Default TTL: 3600s)
2026-01-01 13:43:10 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:79 | Thread-134495425993664 | Projecting collars from Test Layer with buffer 50.0m
2026-01-01 13:43:10 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:94 | Thread-134495425993664 | No collars found within buffer area.
2026-01-01 13:43:10 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:79 | Thread-134495425993664 | Projecting collars from Test Layer with buffer 50.0m
2026-01-01 13:43:10 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:115 | Thread-134495425993664 | DrillholeService.project_collars END: Found 1 collars.
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:163 | Thread-134495425993664 | Generating master profile with interval=10.00
2026-01-01 13:43:10 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:133 | Thread-134495425993664 | Generated 1 geological segments
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:163 | Thread-134495425993664 | Generating master profile with interval=50.00
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:60 | Thread-134495425993664 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:60 | Thread-134495425993664 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:165 | Thread-134495425993664 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:67 | Thread-134495425993664 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:67 | Thread-134495425993664 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-01 13:43:10 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:106 | Thread-134495425993664 | Running geometry operation: test
2026-01-01 13:43:10 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:155 | Thread-134495425993664 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 153, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-01 13:43:10 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:94 | Thread-134495425993664 | Analyzing structures in Structure Layer with buffer 10m
2026-01-01 13:43:10 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:127 | Thread-134495425993664 | Processed 1 structural measurements from Structure Layer
2026-01-01 13:43:10 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:374 | Thread-134495425993664 | Cache cleared by user
2026-01-01 13:43:10 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-134495425993664 | Test Title: Test Message
2026-01-01 13:43:10 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-134495425993664 | Test Title: Test Message
2026-01-01 13:43:10 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-134495425993664 | Test Title: Test Message
2026-01-01 13:44:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-139335271189440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:44:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-139335271189440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:44:46 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-139335271189440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:44:46 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-139335271189440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:44:46 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-139335271189440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:44:46 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-139335271189440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:44:46 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-139335271189440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:44:46 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-139335271189440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:44:46 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-139335271189440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:45:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-123135479425984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:45:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-123135479425984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:45:14 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-123135479425984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:45:14 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-123135479425984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:45:14 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-123135479425984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:45:14 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-123135479425984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:45:14 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-123135479425984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:45:14 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-123135479425984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:45:14 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-123135479425984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:45:14 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:257 | Thread-123135479425984 | Generated 1 drillhole traces
2026-01-01 13:45:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-138249729223616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:45:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-138249729223616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:45:40 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-138249729223616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:45:40 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-138249729223616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:45:40 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-138249729223616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:45:40 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-138249729223616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:45:40 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-138249729223616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:45:40 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-138249729223616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:45:40 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-138249729223616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:45:40 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:257 | Thread-138249729223616 | Generated 1 drillhole traces
2026-01-01 13:45:40 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:257 | Thread-138249729223616 | Generated 1 drillhole traces
2026-01-01 13:46:25 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-126839512415168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:46:25 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-126839512415168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:46:25 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-126839512415168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:46:25 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-126839512415168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:46:25 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-126839512415168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:46:25 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-126839512415168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:46:25 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-126839512415168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:46:25 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-126839512415168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:46:25 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-126839512415168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:46:25 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:257 | Thread-126839512415168 | Generated 1 drillhole traces
2026-01-01 13:46:25 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:257 | Thread-126839512415168 | Generated 1 drillhole traces
2026-01-01 13:46:25 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:174 | Thread-126839512415168 | Drillhole preview skipped: No Collar ID field selected.
2026-01-01 13:46:25 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:174 | Thread-126839512415168 | Drillhole preview skipped: No Collar ID field selected.
2026-01-01 13:47:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-130292919139264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:47:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-130292919139264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:47:07 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-130292919139264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:47:07 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-130292919139264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:47:07 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-130292919139264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:47:07 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-130292919139264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:47:07 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-130292919139264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:47:07 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-130292919139264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:47:07 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-130292919139264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:47:07 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:257 | Thread-130292919139264 | Generated 1 drillhole traces
2026-01-01 13:47:07 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:251 | Thread-130292919139264 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 233, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-01 13:47:07 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-130292919139264 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 233, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 233, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-01 13:47:07 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:257 | Thread-130292919139264 | Generated 1 drillhole traces
2026-01-01 13:47:07 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:174 | Thread-130292919139264 | Drillhole preview skipped: No Collar ID field selected.
2026-01-01 13:47:07 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:174 | Thread-130292919139264 | Drillhole preview skipped: No Collar ID field selected.
2026-01-01 13:47:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-135415334624192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:47:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-135415334624192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:47:32 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-135415334624192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:47:32 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-135415334624192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:47:32 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-135415334624192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:47:32 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-135415334624192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:47:32 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-135415334624192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:47:32 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-135415334624192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:47:32 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-135415334624192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:47:32 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:257 | Thread-135415334624192 | Generated 1 drillhole traces
2026-01-01 13:47:32 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:251 | Thread-135415334624192 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 233, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-01 13:47:32 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-135415334624192 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 233, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 233, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-01 13:47:32 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:257 | Thread-135415334624192 | Generated 1 drillhole traces
2026-01-01 13:47:32 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:174 | Thread-135415334624192 | Drillhole preview skipped: No Collar ID field selected.
2026-01-01 13:47:32 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:174 | Thread-135415334624192 | Drillhole preview skipped: No Collar ID field selected.
2026-01-01 13:47:53 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-140245230406592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:47:53 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-140245230406592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:47:53 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-140245230406592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:47:53 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-140245230406592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:47:53 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-140245230406592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:47:53 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-140245230406592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:47:53 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-140245230406592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:47:53 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-140245230406592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:47:53 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-140245230406592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:47:53 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:257 | Thread-140245230406592 | Generated 1 drillhole traces
2026-01-01 13:47:53 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:251 | Thread-140245230406592 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 233, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-01 13:47:53 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-140245230406592 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 233, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 233, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-01 13:47:53 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:257 | Thread-140245230406592 | Generated 1 drillhole traces
2026-01-01 13:47:53 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:174 | Thread-140245230406592 | Drillhole preview skipped: No Collar ID field selected.
2026-01-01 13:48:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-140408055294912 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:48:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-140408055294912 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:48:26 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-140408055294912 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:48:26 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-140408055294912 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:48:26 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-140408055294912 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:48:26 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-140408055294912 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:48:26 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-140408055294912 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:48:26 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-140408055294912 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:48:26 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-140408055294912 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:48:26 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:257 | Thread-140408055294912 | Generated 1 drillhole traces
2026-01-01 13:48:26 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:251 | Thread-140408055294912 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 233, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-01 13:48:26 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-140408055294912 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 233, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 233, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-01 13:48:26 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:257 | Thread-140408055294912 | Generated 1 drillhole traces
2026-01-01 13:48:26 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:174 | Thread-140408055294912 | Drillhole preview skipped: No Collar ID field selected.
2026-01-01 13:48:48 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-135298640845760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:48:48 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-135298640845760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:48:48 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-135298640845760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:48:48 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-135298640845760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:48:48 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-135298640845760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:48:48 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-135298640845760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:48:48 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-135298640845760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:48:48 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-135298640845760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:48:48 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-135298640845760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:48:48 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:257 | Thread-135298640845760 | Generated 1 drillhole traces
2026-01-01 13:48:48 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:251 | Thread-135298640845760 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 233, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-01 13:48:48 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-135298640845760 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 233, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 233, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-01 13:48:48 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:257 | Thread-135298640845760 | Generated 1 drillhole traces
2026-01-01 13:48:48 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:174 | Thread-135298640845760 | Drillhole preview skipped: No Collar ID field selected.
2026-01-01 13:49:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-135491196849088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:49:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-135491196849088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:49:08 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-135491196849088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:49:08 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-135491196849088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:49:08 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-135491196849088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:49:08 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-135491196849088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:49:08 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-135491196849088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:49:08 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-135491196849088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:49:08 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-135491196849088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:49:08 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:257 | Thread-135491196849088 | Generated 1 drillhole traces
2026-01-01 13:49:08 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:251 | Thread-135491196849088 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 233, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-01 13:49:08 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-135491196849088 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 233, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 233, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-01 13:49:08 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:257 | Thread-135491196849088 | Generated 1 drillhole traces
2026-01-01 13:49:08 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:174 | Thread-135491196849088 | Drillhole preview skipped: No Collar ID field selected.
2026-01-01 13:49:48 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-133364855991232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:49:48 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-133364855991232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:49:48 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-133364855991232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:49:48 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-133364855991232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:49:48 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-133364855991232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:49:48 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-133364855991232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:49:48 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-133364855991232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:49:48 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-133364855991232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:49:48 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-133364855991232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:49:48 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-133364855991232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:49:48 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-133364855991232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:49:48 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-133364855991232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:49:48 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-133364855991232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:49:48 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-133364855991232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:49:48 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-133364855991232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:49:48 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-133364855991232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:49:48 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-133364855991232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:49:48 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-133364855991232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:49:48 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-133364855991232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:49:48 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-133364855991232 | ✓ Saving topographic profile...
2026-01-01 13:49:48 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-133364855991232 | ✓ Saving interpretation data...
2026-01-01 13:49:48 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:214 | Thread-133364855991232 | 3D Export features are restricted for this user.
2026-01-01 13:49:48 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-133364855991232 | ✓ Saving profile axes...
2026-01-01 13:49:48 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-133364855991232 | ✓ Saving topographic profile...
2026-01-01 13:49:48 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-133364855991232 | ✓ Saving interpretation data...
2026-01-01 13:49:48 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:197 | Thread-133364855991232 | ✓ Saving 3D interpretation data...
2026-01-01 13:49:48 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-133364855991232 | ✓ Saving profile axes...
2026-01-01 13:49:48 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-133364855991232 | ✓ Saving topographic profile...
2026-01-01 13:49:48 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-133364855991232 | ✓ Saving profile axes...
2026-01-01 13:49:48 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-133364855991232 | ✓ Saving topographic profile...
2026-01-01 13:50:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-139468375731136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:50:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-139468375731136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:50:46 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-139468375731136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:50:46 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-139468375731136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:50:46 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-139468375731136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:50:46 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-139468375731136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:50:46 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-139468375731136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:50:46 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-139468375731136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:50:46 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-139468375731136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:50:46 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-139468375731136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:50:46 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-139468375731136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:50:46 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-139468375731136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:50:46 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-139468375731136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:50:46 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-139468375731136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:50:46 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-139468375731136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:50:46 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-139468375731136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:50:46 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-139468375731136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:50:46 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-139468375731136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:50:46 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-139468375731136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:50:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-139468375731136 | ✓ Saving topographic profile...
2026-01-01 13:50:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-139468375731136 | ✓ Saving interpretation data...
2026-01-01 13:50:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:214 | Thread-139468375731136 | 3D Export features are restricted for this user.
2026-01-01 13:50:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-139468375731136 | ✓ Saving profile axes...
2026-01-01 13:50:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-139468375731136 | ✓ Saving topographic profile...
2026-01-01 13:50:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-139468375731136 | ✓ Saving interpretation data...
2026-01-01 13:50:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:197 | Thread-139468375731136 | ✓ Saving 3D interpretation data...
2026-01-01 13:50:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-139468375731136 | ✓ Saving profile axes...
2026-01-01 13:50:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-139468375731136 | ✓ Saving topographic profile...
2026-01-01 13:50:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-139468375731136 | ✓ Saving profile axes...
2026-01-01 13:50:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-139468375731136 | ✓ Saving topographic profile...
2026-01-01 13:51:05 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-125428858043328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:05 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-125428858043328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:05 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-125428858043328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:05 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-125428858043328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:05 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-125428858043328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:05 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-125428858043328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:05 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-125428858043328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:05 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-125428858043328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:05 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-125428858043328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:05 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-125428858043328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:05 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-125428858043328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:05 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-125428858043328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:05 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-125428858043328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:05 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-125428858043328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:05 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-125428858043328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:05 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-125428858043328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:05 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-125428858043328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:05 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-125428858043328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:05 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-125428858043328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-125428858043328 | ✓ Saving topographic profile...
2026-01-01 13:51:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-125428858043328 | ✓ Saving interpretation data...
2026-01-01 13:51:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:214 | Thread-125428858043328 | 3D Export features are restricted for this user.
2026-01-01 13:51:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-125428858043328 | ✓ Saving profile axes...
2026-01-01 13:51:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-125428858043328 | ✓ Saving topographic profile...
2026-01-01 13:51:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-125428858043328 | ✓ Saving interpretation data...
2026-01-01 13:51:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:197 | Thread-125428858043328 | ✓ Saving 3D interpretation data...
2026-01-01 13:51:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-125428858043328 | ✓ Saving profile axes...
2026-01-01 13:51:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-125428858043328 | ✓ Saving topographic profile...
2026-01-01 13:51:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:111 | Thread-125428858043328 | ✓ Saving geological profile...
2026-01-01 13:51:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:131 | Thread-125428858043328 | ✓ Saving structural profile...
2026-01-01 13:51:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:165 | Thread-125428858043328 | ✓ Saving drillhole data...
2026-01-01 13:51:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-125428858043328 | ✓ Saving interpretation data...
2026-01-01 13:51:05 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:31 | Thread-125428858043328 | Access denied for restricted feature: 3D Export
2026-01-01 13:51:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:214 | Thread-125428858043328 | 3D Export features are restricted for this user.
2026-01-01 13:51:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-125428858043328 | ✓ Saving profile axes...
2026-01-01 13:51:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-125428858043328 | ✓ Saving topographic profile...
2026-01-01 13:51:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-125428858043328 | ✓ Saving profile axes...
2026-01-01 13:51:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-125428858043328 | ✓ Saving topographic profile...
2026-01-01 13:51:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-140179994459072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-140179994459072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:32 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-140179994459072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:32 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-140179994459072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:32 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-140179994459072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:32 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-140179994459072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:32 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-140179994459072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:32 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-140179994459072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:32 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-140179994459072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:32 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-140179994459072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:32 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-140179994459072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:32 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-140179994459072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:32 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-140179994459072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:32 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-140179994459072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:32 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-140179994459072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:32 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-140179994459072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:32 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-140179994459072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:32 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-140179994459072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-140179994459072 | ✓ Saving profile axes...
2026-01-01 13:51:32 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-140179994459072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-140179994459072 | ✓ Saving topographic profile...
2026-01-01 13:51:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-140179994459072 | ✓ Saving interpretation data...
2026-01-01 13:51:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:214 | Thread-140179994459072 | 3D Export features are restricted for this user.
2026-01-01 13:51:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-140179994459072 | ✓ Saving profile axes...
2026-01-01 13:51:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-140179994459072 | ✓ Saving topographic profile...
2026-01-01 13:51:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-140179994459072 | ✓ Saving interpretation data...
2026-01-01 13:51:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:197 | Thread-140179994459072 | ✓ Saving 3D interpretation data...
2026-01-01 13:51:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-140179994459072 | ✓ Saving profile axes...
2026-01-01 13:51:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-140179994459072 | ✓ Saving topographic profile...
2026-01-01 13:51:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:111 | Thread-140179994459072 | ✓ Saving geological profile...
2026-01-01 13:51:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:131 | Thread-140179994459072 | ✓ Saving structural profile...
2026-01-01 13:51:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:165 | Thread-140179994459072 | ✓ Saving drillhole data...
2026-01-01 13:51:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-140179994459072 | ✓ Saving interpretation data...
2026-01-01 13:51:32 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:31 | Thread-140179994459072 | Access denied for restricted feature: 3D Export
2026-01-01 13:51:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:214 | Thread-140179994459072 | 3D Export features are restricted for this user.
2026-01-01 13:51:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-140179994459072 | ✓ Saving profile axes...
2026-01-01 13:51:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-140179994459072 | ✓ Saving topographic profile...
2026-01-01 13:51:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-140179994459072 | ✓ Saving profile axes...
2026-01-01 13:51:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:165 | Thread-140179994459072 | ✓ Saving drillhole data...
2026-01-01 13:51:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:111 | Thread-140179994459072 | ✓ Saving geological profile...
2026-01-01 13:51:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-140179994459072 | ✓ Saving interpretation data...
2026-01-01 13:51:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:197 | Thread-140179994459072 | ✓ Saving 3D interpretation data...
2026-01-01 13:51:32 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-140179994459072 | Invalid section line layer, skipping 3D export.
2026-01-01 13:51:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-140179994459072 | ✓ Saving interpretation data...
2026-01-01 13:51:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:131 | Thread-140179994459072 | ✓ Saving structural profile...
2026-01-01 13:51:57 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-138432277351360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:57 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-138432277351360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:57 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-138432277351360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:57 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-138432277351360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:57 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-138432277351360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:57 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-138432277351360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:57 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-138432277351360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:57 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-138432277351360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:57 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-138432277351360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:57 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-138432277351360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:57 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-138432277351360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:57 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-138432277351360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:57 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-138432277351360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:57 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-138432277351360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:57 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-138432277351360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:57 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-138432277351360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:57 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-138432277351360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:57 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-138432277351360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-138432277351360 | ✓ Saving profile axes...
2026-01-01 13:51:57 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-138432277351360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:51:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-138432277351360 | ✓ Saving topographic profile...
2026-01-01 13:51:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-138432277351360 | ✓ Saving interpretation data...
2026-01-01 13:51:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:214 | Thread-138432277351360 | 3D Export features are restricted for this user.
2026-01-01 13:51:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-138432277351360 | ✓ Saving profile axes...
2026-01-01 13:51:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-138432277351360 | ✓ Saving topographic profile...
2026-01-01 13:51:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-138432277351360 | ✓ Saving interpretation data...
2026-01-01 13:51:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:197 | Thread-138432277351360 | ✓ Saving 3D interpretation data...
2026-01-01 13:51:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-138432277351360 | ✓ Saving profile axes...
2026-01-01 13:51:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-138432277351360 | ✓ Saving topographic profile...
2026-01-01 13:51:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:111 | Thread-138432277351360 | ✓ Saving geological profile...
2026-01-01 13:51:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:131 | Thread-138432277351360 | ✓ Saving structural profile...
2026-01-01 13:51:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:165 | Thread-138432277351360 | ✓ Saving drillhole data...
2026-01-01 13:51:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-138432277351360 | ✓ Saving interpretation data...
2026-01-01 13:51:57 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:31 | Thread-138432277351360 | Access denied for restricted feature: 3D Export
2026-01-01 13:51:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:214 | Thread-138432277351360 | 3D Export features are restricted for this user.
2026-01-01 13:51:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-138432277351360 | ✓ Saving profile axes...
2026-01-01 13:51:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-138432277351360 | ✓ Saving topographic profile...
2026-01-01 13:51:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-138432277351360 | ✓ Saving profile axes...
2026-01-01 13:51:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:165 | Thread-138432277351360 | ✓ Saving drillhole data...
2026-01-01 13:51:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:111 | Thread-138432277351360 | ✓ Saving geological profile...
2026-01-01 13:51:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-138432277351360 | ✓ Saving interpretation data...
2026-01-01 13:51:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:197 | Thread-138432277351360 | ✓ Saving 3D interpretation data...
2026-01-01 13:51:57 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-138432277351360 | Invalid section line layer, skipping 3D export.
2026-01-01 13:51:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-138432277351360 | ✓ Saving interpretation data...
2026-01-01 13:51:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:131 | Thread-138432277351360 | ✓ Saving structural profile...
2026-01-01 13:52:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-130360174848960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:52:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-130360174848960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:52:22 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-130360174848960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:52:22 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-130360174848960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:52:22 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-130360174848960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:52:22 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-130360174848960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:52:22 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-130360174848960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:52:22 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-130360174848960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:52:22 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-130360174848960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:52:22 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-130360174848960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:52:22 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-130360174848960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:52:22 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-130360174848960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:52:22 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-130360174848960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:52:22 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-130360174848960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:52:22 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-130360174848960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:52:22 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-130360174848960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:52:22 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-130360174848960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:52:22 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-130360174848960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:52:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-130360174848960 | ✓ Saving profile axes...
2026-01-01 13:52:22 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-130360174848960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:52:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-130360174848960 | ✓ Saving topographic profile...
2026-01-01 13:52:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-130360174848960 | ✓ Saving interpretation data...
2026-01-01 13:52:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:214 | Thread-130360174848960 | 3D Export features are restricted for this user.
2026-01-01 13:52:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-130360174848960 | ✓ Saving profile axes...
2026-01-01 13:52:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-130360174848960 | ✓ Saving topographic profile...
2026-01-01 13:52:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-130360174848960 | ✓ Saving interpretation data...
2026-01-01 13:52:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:197 | Thread-130360174848960 | ✓ Saving 3D interpretation data...
2026-01-01 13:52:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-130360174848960 | ✓ Saving profile axes...
2026-01-01 13:52:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-130360174848960 | ✓ Saving topographic profile...
2026-01-01 13:52:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:111 | Thread-130360174848960 | ✓ Saving geological profile...
2026-01-01 13:52:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:131 | Thread-130360174848960 | ✓ Saving structural profile...
2026-01-01 13:52:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:165 | Thread-130360174848960 | ✓ Saving drillhole data...
2026-01-01 13:52:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-130360174848960 | ✓ Saving interpretation data...
2026-01-01 13:52:22 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:31 | Thread-130360174848960 | Access denied for restricted feature: 3D Export
2026-01-01 13:52:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:214 | Thread-130360174848960 | 3D Export features are restricted for this user.
2026-01-01 13:52:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-130360174848960 | ✓ Saving profile axes...
2026-01-01 13:52:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-130360174848960 | ✓ Saving topographic profile...
2026-01-01 13:52:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-130360174848960 | ✓ Saving profile axes...
2026-01-01 13:52:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:165 | Thread-130360174848960 | ✓ Saving drillhole data...
2026-01-01 13:52:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:111 | Thread-130360174848960 | ✓ Saving geological profile...
2026-01-01 13:52:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-130360174848960 | ✓ Saving interpretation data...
2026-01-01 13:52:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:197 | Thread-130360174848960 | ✓ Saving 3D interpretation data...
2026-01-01 13:52:22 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-130360174848960 | Invalid section line layer, skipping 3D export.
2026-01-01 13:52:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-130360174848960 | ✓ Saving interpretation data...
2026-01-01 13:52:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:131 | Thread-130360174848960 | ✓ Saving structural profile...
2026-01-01 13:52:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-130360174848960 | ✓ Saving topographic profile...
2026-01-01 13:53:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-130142531767232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:53:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-130142531767232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:53:41 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-130142531767232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:53:41 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-130142531767232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:53:41 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-130142531767232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:53:41 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-130142531767232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:53:41 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-130142531767232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:53:41 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-130142531767232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:53:41 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-130142531767232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:53:41 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-130142531767232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:53:41 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-130142531767232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:53:41 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-130142531767232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:53:41 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-130142531767232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-130142531767232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:53:41 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-130142531767232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:53:41 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-130142531767232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:53:41 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-130142531767232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:53:41 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-130142531767232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:53:41 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-130142531767232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:53:41 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-130142531767232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-130142531767232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:53:41 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-130142531767232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:53:41 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-130142531767232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-130142531767232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-130142531767232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:53:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-130142531767232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:53:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-130142531767232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:53:41 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-130142531767232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:53:41 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-130142531767232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:53:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-130142531767232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:53:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-130142531767232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:53:41 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-130142531767232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:53:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-130142531767232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-136438739876800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-136438739876800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:04 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-136438739876800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:04 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-136438739876800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:04 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-136438739876800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:04 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-136438739876800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:04 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-136438739876800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:04 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-136438739876800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:04 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-136438739876800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:04 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-136438739876800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:04 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-136438739876800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:05 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-136438739876800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:05 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-136438739876800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-136438739876800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:05 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-136438739876800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:05 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-136438739876800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:05 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-136438739876800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:05 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-136438739876800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:05 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-136438739876800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:05 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-136438739876800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-136438739876800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:05 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-136438739876800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:05 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-136438739876800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-136438739876800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-136438739876800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:05 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-136438739876800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-136438739876800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:05 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-136438739876800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:05 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-136438739876800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:05 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-136438739876800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:05 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-136438739876800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:05 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-136438739876800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:05 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-136438739876800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-123423065111488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-123423065111488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-123423065111488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-123423065111488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-123423065111488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-123423065111488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-123423065111488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-123423065111488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-123423065111488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-123423065111488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-123423065111488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-123423065111488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-123423065111488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-123423065111488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-123423065111488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-123423065111488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-123423065111488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-123423065111488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-123423065111488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-123423065111488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-123423065111488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-123423065111488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-123423065111488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-123423065111488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-123423065111488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-123423065111488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-123423065111488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-123423065111488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-123423065111488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-123423065111488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-123423065111488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-123423065111488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-123423065111488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:54:27 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-123423065111488 | reset() called, finalized=False
2026-01-01 13:54:27 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-123423065111488 | finalize_measurement called with 2 points
2026-01-01 13:54:27 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-123423065111488 | Setting finalized = True
2026-01-01 13:54:27 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:271 | Thread-123423065111488 | Measurement finalized: 2 points, 100.00m total distance
2026-01-01 13:54:27 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:286 | Thread-123423065111488 | Switching to pan tool to stop measurement
2026-01-01 13:54:27 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:289 | Thread-123423065111488 | Pan tool activated - measurement should be frozen
2026-01-01 13:54:27 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:197 | Thread-123423065111488 | Ignoring click - measurement is finalized
2026-01-01 13:54:27 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-123423065111488 | finalize_measurement called with 2 points
2026-01-01 13:54:27 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-123423065111488 | Setting finalized = True
2026-01-01 13:54:27 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-123423065111488 | reset() called, finalized=False
2026-01-01 13:54:27 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-123423065111488 | reset() called, finalized=True
2026-01-01 13:54:27 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:158 | Thread-123423065111488 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:141 | Thread-123423065111488 | ProfileMeasureTool activated
2026-01-01 13:54:27 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-123423065111488 | reset() called, finalized=False
2026-01-01 13:54:27 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:146 | Thread-123423065111488 | ProfileMeasureTool deactivated
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-125293590354880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-125293590354880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-125293590354880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-125293590354880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-125293590354880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-125293590354880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-125293590354880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-125293590354880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-125293590354880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-125293590354880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-125293590354880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-125293590354880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-125293590354880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-125293590354880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-125293590354880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-125293590354880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-125293590354880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-125293590354880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-125293590354880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-125293590354880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-125293590354880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-125293590354880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-125293590354880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-125293590354880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-125293590354880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-125293590354880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-125293590354880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-125293590354880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-125293590354880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-125293590354880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-125293590354880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-125293590354880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-125293590354880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:55:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-125293590354880 | reset() called, finalized=False
2026-01-01 13:55:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-125293590354880 | finalize_measurement called with 2 points
2026-01-01 13:55:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-125293590354880 | Setting finalized = True
2026-01-01 13:55:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:271 | Thread-125293590354880 | Measurement finalized: 2 points, 100.00m total distance
2026-01-01 13:55:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:286 | Thread-125293590354880 | Switching to pan tool to stop measurement
2026-01-01 13:55:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:289 | Thread-125293590354880 | Pan tool activated - measurement should be frozen
2026-01-01 13:55:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:197 | Thread-125293590354880 | Ignoring click - measurement is finalized
2026-01-01 13:55:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-125293590354880 | finalize_measurement called with 2 points
2026-01-01 13:55:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-125293590354880 | Setting finalized = True
2026-01-01 13:55:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-125293590354880 | reset() called, finalized=False
2026-01-01 13:55:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-125293590354880 | reset() called, finalized=True
2026-01-01 13:55:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:158 | Thread-125293590354880 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:141 | Thread-125293590354880 | ProfileMeasureTool activated
2026-01-01 13:55:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-125293590354880 | reset() called, finalized=False
2026-01-01 13:55:31 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:146 | Thread-125293590354880 | ProfileMeasureTool deactivated
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-126840770816960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-126840770816960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-126840770816960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-126840770816960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-126840770816960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-126840770816960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-126840770816960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-126840770816960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-126840770816960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-126840770816960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-126840770816960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-126840770816960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-126840770816960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-126840770816960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-126840770816960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-126840770816960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-126840770816960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-126840770816960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-126840770816960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-126840770816960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-126840770816960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-126840770816960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-126840770816960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-126840770816960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-126840770816960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-126840770816960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-126840770816960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-126840770816960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-126840770816960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-126840770816960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-126840770816960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-126840770816960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-126840770816960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-126840770816960 | reset() called, finalized=False
2026-01-01 13:56:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-126840770816960 | finalize_measurement called with 2 points
2026-01-01 13:56:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-126840770816960 | Setting finalized = True
2026-01-01 13:56:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:271 | Thread-126840770816960 | Measurement finalized: 2 points, 100.00m total distance
2026-01-01 13:56:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:286 | Thread-126840770816960 | Switching to pan tool to stop measurement
2026-01-01 13:56:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:289 | Thread-126840770816960 | Pan tool activated - measurement should be frozen
2026-01-01 13:56:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:197 | Thread-126840770816960 | Ignoring click - measurement is finalized
2026-01-01 13:56:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-126840770816960 | finalize_measurement called with 2 points
2026-01-01 13:56:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-126840770816960 | Setting finalized = True
2026-01-01 13:56:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-126840770816960 | reset() called, finalized=False
2026-01-01 13:56:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-126840770816960 | reset() called, finalized=True
2026-01-01 13:56:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:158 | Thread-126840770816960 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:141 | Thread-126840770816960 | ProfileMeasureTool activated
2026-01-01 13:56:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-126840770816960 | reset() called, finalized=False
2026-01-01 13:56:05 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:146 | Thread-126840770816960 | ProfileMeasureTool deactivated
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-125590976859072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-125590976859072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-125590976859072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-125590976859072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-125590976859072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-125590976859072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-125590976859072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-125590976859072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-125590976859072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-125590976859072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-125590976859072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-125590976859072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-125590976859072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-125590976859072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-125590976859072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-125590976859072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-125590976859072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-125590976859072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-125590976859072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-125590976859072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-125590976859072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-125590976859072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-125590976859072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-125590976859072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-125590976859072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-125590976859072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-125590976859072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-125590976859072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-125590976859072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-125590976859072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-125590976859072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-125590976859072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-125590976859072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:56:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-125590976859072 | reset() called, finalized=False
2026-01-01 13:56:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-125590976859072 | finalize_measurement called with 2 points
2026-01-01 13:56:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-125590976859072 | Setting finalized = True
2026-01-01 13:56:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:271 | Thread-125590976859072 | Measurement finalized: 2 points, 100.00m total distance
2026-01-01 13:56:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:286 | Thread-125590976859072 | Switching to pan tool to stop measurement
2026-01-01 13:56:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:289 | Thread-125590976859072 | Pan tool activated - measurement should be frozen
2026-01-01 13:56:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:197 | Thread-125590976859072 | Ignoring click - measurement is finalized
2026-01-01 13:56:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-125590976859072 | finalize_measurement called with 2 points
2026-01-01 13:56:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-125590976859072 | Setting finalized = True
2026-01-01 13:56:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:271 | Thread-125590976859072 | Measurement finalized: 2 points, 100.00m total distance
2026-01-01 13:56:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:286 | Thread-125590976859072 | Switching to pan tool to stop measurement
2026-01-01 13:56:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:289 | Thread-125590976859072 | Pan tool activated - measurement should be frozen
2026-01-01 13:56:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-125590976859072 | reset() called, finalized=False
2026-01-01 13:56:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-125590976859072 | reset() called, finalized=False
2026-01-01 13:56:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-125590976859072 | reset() called, finalized=True
2026-01-01 13:56:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:158 | Thread-125590976859072 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:141 | Thread-125590976859072 | ProfileMeasureTool activated
2026-01-01 13:56:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-125590976859072 | reset() called, finalized=False
2026-01-01 13:56:35 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:146 | Thread-125590976859072 | ProfileMeasureTool deactivated
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-132889513864128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-132889513864128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-132889513864128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-132889513864128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-132889513864128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-132889513864128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-132889513864128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-132889513864128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-132889513864128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-132889513864128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-132889513864128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-132889513864128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-132889513864128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-132889513864128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-132889513864128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-132889513864128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-132889513864128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-132889513864128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-132889513864128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-132889513864128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-132889513864128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-132889513864128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-132889513864128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-132889513864128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-132889513864128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-132889513864128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-132889513864128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-132889513864128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-132889513864128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-132889513864128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-132889513864128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-132889513864128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-132889513864128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-132889513864128 | reset() called, finalized=False
2026-01-01 13:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-132889513864128 | finalize_measurement called with 2 points
2026-01-01 13:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-132889513864128 | Setting finalized = True
2026-01-01 13:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:271 | Thread-132889513864128 | Measurement finalized: 2 points, 100.00m total distance
2026-01-01 13:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:286 | Thread-132889513864128 | Switching to pan tool to stop measurement
2026-01-01 13:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:289 | Thread-132889513864128 | Pan tool activated - measurement should be frozen
2026-01-01 13:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:197 | Thread-132889513864128 | Ignoring click - measurement is finalized
2026-01-01 13:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-132889513864128 | finalize_measurement called with 2 points
2026-01-01 13:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-132889513864128 | Setting finalized = True
2026-01-01 13:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:271 | Thread-132889513864128 | Measurement finalized: 2 points, 100.00m total distance
2026-01-01 13:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:286 | Thread-132889513864128 | Switching to pan tool to stop measurement
2026-01-01 13:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:289 | Thread-132889513864128 | Pan tool activated - measurement should be frozen
2026-01-01 13:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-132889513864128 | reset() called, finalized=False
2026-01-01 13:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-132889513864128 | reset() called, finalized=False
2026-01-01 13:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-132889513864128 | reset() called, finalized=True
2026-01-01 13:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:158 | Thread-132889513864128 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:141 | Thread-132889513864128 | ProfileMeasureTool activated
2026-01-01 13:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-132889513864128 | reset() called, finalized=False
2026-01-01 13:57:07 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:146 | Thread-132889513864128 | ProfileMeasureTool deactivated
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-132980364848064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-132980364848064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-132980364848064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-132980364848064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-132980364848064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-132980364848064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-132980364848064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-132980364848064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-132980364848064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-132980364848064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-132980364848064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-132980364848064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-132980364848064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-132980364848064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-132980364848064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-132980364848064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-132980364848064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-132980364848064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-132980364848064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-132980364848064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-132980364848064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-132980364848064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-132980364848064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-132980364848064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-132980364848064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-132980364848064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-132980364848064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-132980364848064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-132980364848064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-132980364848064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-132980364848064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-132980364848064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-132980364848064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:243 | Thread-132980364848064 | Point 1 added: 0.00, 0.00
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:243 | Thread-132980364848064 | Point 2 added: 100.00, 100.00
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:243 | Thread-132980364848064 | Point 1 added: 50.00, 50.00
2026-01-01 13:57:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-132980364848064 | reset() called, finalized=False
2026-01-01 13:57:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-132980364848064 | finalize_measurement called with 2 points
2026-01-01 13:57:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-132980364848064 | Setting finalized = True
2026-01-01 13:57:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:271 | Thread-132980364848064 | Measurement finalized: 2 points, 100.00m total distance
2026-01-01 13:57:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:286 | Thread-132980364848064 | Switching to pan tool to stop measurement
2026-01-01 13:57:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:289 | Thread-132980364848064 | Pan tool activated - measurement should be frozen
2026-01-01 13:57:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:197 | Thread-132980364848064 | Ignoring click - measurement is finalized
2026-01-01 13:57:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-132980364848064 | finalize_measurement called with 2 points
2026-01-01 13:57:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-132980364848064 | Setting finalized = True
2026-01-01 13:57:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:271 | Thread-132980364848064 | Measurement finalized: 2 points, 100.00m total distance
2026-01-01 13:57:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:286 | Thread-132980364848064 | Switching to pan tool to stop measurement
2026-01-01 13:57:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:289 | Thread-132980364848064 | Pan tool activated - measurement should be frozen
2026-01-01 13:57:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-132980364848064 | reset() called, finalized=False
2026-01-01 13:57:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-132980364848064 | reset() called, finalized=False
2026-01-01 13:57:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-132980364848064 | reset() called, finalized=True
2026-01-01 13:57:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:158 | Thread-132980364848064 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:141 | Thread-132980364848064 | ProfileMeasureTool activated
2026-01-01 13:57:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-132980364848064 | reset() called, finalized=False
2026-01-01 13:57:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:146 | Thread-132980364848064 | ProfileMeasureTool deactivated
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-139648464231360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-139648464231360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-139648464231360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-139648464231360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-139648464231360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-139648464231360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-139648464231360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-139648464231360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-139648464231360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-139648464231360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-139648464231360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-139648464231360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-139648464231360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-139648464231360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-139648464231360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-139648464231360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-139648464231360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-139648464231360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-139648464231360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-139648464231360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-139648464231360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-139648464231360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-139648464231360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-139648464231360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-139648464231360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-139648464231360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-139648464231360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-139648464231360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-139648464231360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-139648464231360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-139648464231360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-139648464231360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-139648464231360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:243 | Thread-139648464231360 | Point 1 added: 0.00, 0.00
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:243 | Thread-139648464231360 | Point 2 added: 100.00, 100.00
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:243 | Thread-139648464231360 | Point 1 added: 50.00, 50.00
2026-01-01 13:58:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-139648464231360 | reset() called, finalized=False
2026-01-01 13:58:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-139648464231360 | finalize_measurement called with 1 points
2026-01-01 13:58:08 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:259 | Thread-139648464231360 | Cannot finalize measurement with less than 2 points
2026-01-01 13:58:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-139648464231360 | finalize_measurement called with 2 points
2026-01-01 13:58:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-139648464231360 | Setting finalized = True
2026-01-01 13:58:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:271 | Thread-139648464231360 | Measurement finalized: 2 points, 100.00m total distance
2026-01-01 13:58:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:286 | Thread-139648464231360 | Switching to pan tool to stop measurement
2026-01-01 13:58:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:289 | Thread-139648464231360 | Pan tool activated - measurement should be frozen
2026-01-01 13:58:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:197 | Thread-139648464231360 | Ignoring click - measurement is finalized
2026-01-01 13:58:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-139648464231360 | finalize_measurement called with 2 points
2026-01-01 13:58:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-139648464231360 | Setting finalized = True
2026-01-01 13:58:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:271 | Thread-139648464231360 | Measurement finalized: 2 points, 100.00m total distance
2026-01-01 13:58:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:286 | Thread-139648464231360 | Switching to pan tool to stop measurement
2026-01-01 13:58:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:289 | Thread-139648464231360 | Pan tool activated - measurement should be frozen
2026-01-01 13:58:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-139648464231360 | reset() called, finalized=False
2026-01-01 13:58:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-139648464231360 | reset() called, finalized=False
2026-01-01 13:58:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-139648464231360 | reset() called, finalized=True
2026-01-01 13:58:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:158 | Thread-139648464231360 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-01 13:58:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-139648464231360 | reset() called, finalized=False
2026-01-01 13:58:08 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:106 | Thread-139648464231360 | Failed to create locator for layer layer1: mock error
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:141 | Thread-139648464231360 | ProfileMeasureTool activated
2026-01-01 13:58:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-139648464231360 | reset() called, finalized=False
2026-01-01 13:58:08 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:146 | Thread-139648464231360 | ProfileMeasureTool deactivated
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-127048345689024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-127048345689024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-127048345689024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-127048345689024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-127048345689024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-127048345689024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-127048345689024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-127048345689024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-127048345689024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-127048345689024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-127048345689024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-127048345689024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-127048345689024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-127048345689024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-127048345689024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-127048345689024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-127048345689024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-127048345689024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-127048345689024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-127048345689024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-127048345689024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-127048345689024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-127048345689024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-127048345689024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-127048345689024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-127048345689024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-127048345689024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-127048345689024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-127048345689024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-127048345689024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-127048345689024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-127048345689024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-127048345689024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:243 | Thread-127048345689024 | Point 1 added: 0.00, 0.00
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:243 | Thread-127048345689024 | Point 2 added: 100.00, 100.00
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:243 | Thread-127048345689024 | Point 1 added: 50.00, 50.00
2026-01-01 13:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-127048345689024 | reset() called, finalized=False
2026-01-01 13:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-127048345689024 | finalize_measurement called with 1 points
2026-01-01 13:58:38 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:259 | Thread-127048345689024 | Cannot finalize measurement with less than 2 points
2026-01-01 13:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-127048345689024 | finalize_measurement called with 2 points
2026-01-01 13:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-127048345689024 | Setting finalized = True
2026-01-01 13:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:271 | Thread-127048345689024 | Measurement finalized: 2 points, 100.00m total distance
2026-01-01 13:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:286 | Thread-127048345689024 | Switching to pan tool to stop measurement
2026-01-01 13:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:289 | Thread-127048345689024 | Pan tool activated - measurement should be frozen
2026-01-01 13:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:197 | Thread-127048345689024 | Ignoring click - measurement is finalized
2026-01-01 13:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-127048345689024 | finalize_measurement called with 2 points
2026-01-01 13:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-127048345689024 | Setting finalized = True
2026-01-01 13:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:271 | Thread-127048345689024 | Measurement finalized: 2 points, 100.00m total distance
2026-01-01 13:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:286 | Thread-127048345689024 | Switching to pan tool to stop measurement
2026-01-01 13:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:289 | Thread-127048345689024 | Pan tool activated - measurement should be frozen
2026-01-01 13:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-127048345689024 | reset() called, finalized=False
2026-01-01 13:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-127048345689024 | reset() called, finalized=False
2026-01-01 13:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-127048345689024 | reset() called, finalized=True
2026-01-01 13:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:158 | Thread-127048345689024 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-01 13:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-127048345689024 | reset() called, finalized=False
2026-01-01 13:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-127048345689024 | finalize_measurement called with 2 points
2026-01-01 13:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-127048345689024 | Setting finalized = True
2026-01-01 13:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:271 | Thread-127048345689024 | Measurement finalized: 2 points, 100.00m total distance
2026-01-01 13:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-127048345689024 | Rubber band redrawn with final points only
2026-01-01 13:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:286 | Thread-127048345689024 | Switching to pan tool to stop measurement
2026-01-01 13:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:289 | Thread-127048345689024 | Pan tool activated - measurement should be frozen
2026-01-01 13:58:38 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:106 | Thread-127048345689024 | Failed to create locator for layer layer1: mock error
2026-01-01 13:58:38 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:106 | Thread-127048345689024 | Failed to create locator for layer l2: fail
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:141 | Thread-127048345689024 | ProfileMeasureTool activated
2026-01-01 13:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-127048345689024 | reset() called, finalized=False
2026-01-01 13:58:38 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:146 | Thread-127048345689024 | ProfileMeasureTool deactivated
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-124041683487680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-124041683487680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-124041683487680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-124041683487680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-124041683487680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-124041683487680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-124041683487680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-124041683487680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-124041683487680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-124041683487680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-124041683487680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-124041683487680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-124041683487680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-124041683487680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-124041683487680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-124041683487680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-124041683487680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-124041683487680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-124041683487680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-124041683487680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-124041683487680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-124041683487680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-124041683487680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-124041683487680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-124041683487680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-124041683487680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-124041683487680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-124041683487680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-124041683487680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-124041683487680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-124041683487680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-124041683487680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-124041683487680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:243 | Thread-124041683487680 | Point 1 added: 0.00, 0.00
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:243 | Thread-124041683487680 | Point 2 added: 100.00, 100.00
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:243 | Thread-124041683487680 | Point 1 added: 50.00, 50.00
2026-01-01 13:58:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-124041683487680 | reset() called, finalized=False
2026-01-01 13:58:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-124041683487680 | finalize_measurement called with 1 points
2026-01-01 13:58:57 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:259 | Thread-124041683487680 | Cannot finalize measurement with less than 2 points
2026-01-01 13:58:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-124041683487680 | finalize_measurement called with 2 points
2026-01-01 13:58:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124041683487680 | Setting finalized = True
2026-01-01 13:58:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:271 | Thread-124041683487680 | Measurement finalized: 2 points, 100.00m total distance
2026-01-01 13:58:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:286 | Thread-124041683487680 | Switching to pan tool to stop measurement
2026-01-01 13:58:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:289 | Thread-124041683487680 | Pan tool activated - measurement should be frozen
2026-01-01 13:58:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:197 | Thread-124041683487680 | Ignoring click - measurement is finalized
2026-01-01 13:58:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-124041683487680 | finalize_measurement called with 2 points
2026-01-01 13:58:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124041683487680 | Setting finalized = True
2026-01-01 13:58:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:271 | Thread-124041683487680 | Measurement finalized: 2 points, 100.00m total distance
2026-01-01 13:58:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:286 | Thread-124041683487680 | Switching to pan tool to stop measurement
2026-01-01 13:58:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:289 | Thread-124041683487680 | Pan tool activated - measurement should be frozen
2026-01-01 13:58:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-124041683487680 | reset() called, finalized=False
2026-01-01 13:58:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-124041683487680 | reset() called, finalized=False
2026-01-01 13:58:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-124041683487680 | reset() called, finalized=True
2026-01-01 13:58:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:158 | Thread-124041683487680 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-01 13:58:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-124041683487680 | reset() called, finalized=False
2026-01-01 13:58:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-124041683487680 | finalize_measurement called with 2 points
2026-01-01 13:58:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124041683487680 | Setting finalized = True
2026-01-01 13:58:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:271 | Thread-124041683487680 | Measurement finalized: 2 points, 100.00m total distance
2026-01-01 13:58:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-124041683487680 | Rubber band redrawn with final points only
2026-01-01 13:58:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:286 | Thread-124041683487680 | Switching to pan tool to stop measurement
2026-01-01 13:58:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:289 | Thread-124041683487680 | Pan tool activated - measurement should be frozen
2026-01-01 13:58:57 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:106 | Thread-124041683487680 | Failed to create locator for layer layer1: mock error
2026-01-01 13:58:57 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:106 | Thread-124041683487680 | Failed to create locator for layer l2: fail
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:141 | Thread-124041683487680 | ProfileMeasureTool activated
2026-01-01 13:58:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-124041683487680 | reset() called, finalized=False
2026-01-01 13:58:57 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:146 | Thread-124041683487680 | ProfileMeasureTool deactivated
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-139833030265792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-139833030265792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-139833030265792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-139833030265792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-139833030265792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-139833030265792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-139833030265792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-139833030265792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-139833030265792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-139833030265792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-139833030265792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-139833030265792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-139833030265792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-139833030265792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-139833030265792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-139833030265792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-139833030265792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-139833030265792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-139833030265792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-139833030265792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-139833030265792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-139833030265792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-139833030265792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-139833030265792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-139833030265792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-139833030265792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-139833030265792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-139833030265792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-139833030265792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-139833030265792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-139833030265792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-139833030265792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-139833030265792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-139833030265792 | CRITICAL_OP: finalize_polygon | points=2
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:275 | Thread-139833030265792 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-01 13:59:31 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:279 | Thread-139833030265792 | finalize_polygon() aborted - less than 3 points
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-139833030265792 | CRITICAL_OP: finalize_polygon | points=3
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:275 | Thread-139833030265792 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:304 | Thread-139833030265792 | finalize_polygon() - emitting polygonFinished signal for 183b39e8-2a45-4ef8-ad3a-9acc92309d5e
2026-01-01 13:59:31 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:308 | Thread-139833030265792 | Interpretation polygon finalized with 3 vertices, ID: 183b39e8-2a45-4ef8-ad3a-9acc92309d5e
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:311 | Thread-139833030265792 | finalize_polygon() completed
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-139833030265792 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:159 | Thread-139833030265792 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-139833030265792 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:181 | Thread-139833030265792 | ProfileInterpretationTool.reset() completed
2026-01-01 13:59:31 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:111 | Thread-139833030265792 | Failed to create locator for layer layer1: mock error
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:139 | Thread-139833030265792 | ProfileInterpretationTool.activate() called
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:142 | Thread-139833030265792 | ProfileInterpretationTool activated successfully
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:147 | Thread-139833030265792 | ProfileInterpretationTool.deactivate() called
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:159 | Thread-139833030265792 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-139833030265792 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:181 | Thread-139833030265792 | ProfileInterpretationTool.reset() completed
2026-01-01 13:59:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:150 | Thread-139833030265792 | ProfileInterpretationTool deactivated successfully
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-124379743374272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-124379743374272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-124379743374272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-124379743374272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-124379743374272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-124379743374272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-124379743374272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-124379743374272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-124379743374272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-124379743374272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-124379743374272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-124379743374272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-124379743374272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-124379743374272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-124379743374272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-124379743374272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-124379743374272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-124379743374272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-124379743374272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-124379743374272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-124379743374272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-124379743374272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-124379743374272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-124379743374272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-124379743374272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-124379743374272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-124379743374272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-124379743374272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-124379743374272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-124379743374272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-124379743374272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-124379743374272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-124379743374272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-124379743374272 | CRITICAL_OP: finalize_polygon | points=2
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:275 | Thread-124379743374272 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-01 13:59:49 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:279 | Thread-124379743374272 | finalize_polygon() aborted - less than 3 points
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-124379743374272 | CRITICAL_OP: finalize_polygon | points=3
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:275 | Thread-124379743374272 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:304 | Thread-124379743374272 | finalize_polygon() - emitting polygonFinished signal for 5c63720e-3544-49ca-b0c7-aa77eae43a0d
2026-01-01 13:59:49 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:308 | Thread-124379743374272 | Interpretation polygon finalized with 3 vertices, ID: 5c63720e-3544-49ca-b0c7-aa77eae43a0d
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:311 | Thread-124379743374272 | finalize_polygon() completed
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-124379743374272 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:159 | Thread-124379743374272 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-124379743374272 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:181 | Thread-124379743374272 | ProfileInterpretationTool.reset() completed
2026-01-01 13:59:49 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:111 | Thread-124379743374272 | Failed to create locator for layer layer1: mock error
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:139 | Thread-124379743374272 | ProfileInterpretationTool.activate() called
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:142 | Thread-124379743374272 | ProfileInterpretationTool activated successfully
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:147 | Thread-124379743374272 | ProfileInterpretationTool.deactivate() called
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:159 | Thread-124379743374272 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-124379743374272 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:181 | Thread-124379743374272 | ProfileInterpretationTool.reset() completed
2026-01-01 13:59:49 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:150 | Thread-124379743374272 | ProfileInterpretationTool deactivated successfully
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-130217987783616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-130217987783616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-130217987783616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-130217987783616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-130217987783616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-130217987783616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-130217987783616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-130217987783616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-130217987783616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-130217987783616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-130217987783616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-130217987783616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-130217987783616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-130217987783616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-130217987783616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-130217987783616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-130217987783616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-130217987783616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-130217987783616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-130217987783616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-130217987783616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-130217987783616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-130217987783616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-130217987783616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-130217987783616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-130217987783616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-130217987783616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-130217987783616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-130217987783616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-130217987783616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-130217987783616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-130217987783616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-130217987783616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-130217987783616 | CRITICAL_OP: finalize_polygon | points=2
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:275 | Thread-130217987783616 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-01 14:00:15 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:279 | Thread-130217987783616 | finalize_polygon() aborted - less than 3 points
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-130217987783616 | CRITICAL_OP: finalize_polygon | points=3
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:275 | Thread-130217987783616 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:304 | Thread-130217987783616 | finalize_polygon() - emitting polygonFinished signal for b271e1d4-4ffc-466c-b84a-a2f2e22b8159
2026-01-01 14:00:15 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:308 | Thread-130217987783616 | Interpretation polygon finalized with 3 vertices, ID: b271e1d4-4ffc-466c-b84a-a2f2e22b8159
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:311 | Thread-130217987783616 | finalize_polygon() completed
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-130217987783616 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:159 | Thread-130217987783616 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-130217987783616 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:181 | Thread-130217987783616 | ProfileInterpretationTool.reset() completed
2026-01-01 14:00:15 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:111 | Thread-130217987783616 | Failed to create locator for layer layer1: mock error
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:139 | Thread-130217987783616 | ProfileInterpretationTool.activate() called
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:142 | Thread-130217987783616 | ProfileInterpretationTool activated successfully
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:147 | Thread-130217987783616 | ProfileInterpretationTool.deactivate() called
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:159 | Thread-130217987783616 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-130217987783616 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:181 | Thread-130217987783616 | ProfileInterpretationTool.reset() completed
2026-01-01 14:00:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:150 | Thread-130217987783616 | ProfileInterpretationTool deactivated successfully
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-134608240257984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-134608240257984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-134608240257984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-134608240257984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-134608240257984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-134608240257984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-134608240257984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-134608240257984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-134608240257984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-134608240257984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-134608240257984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-134608240257984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-134608240257984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-134608240257984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-134608240257984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-134608240257984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-134608240257984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-134608240257984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-134608240257984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-134608240257984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-134608240257984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-134608240257984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-134608240257984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-134608240257984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-134608240257984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-134608240257984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-134608240257984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-134608240257984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-134608240257984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-134608240257984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-134608240257984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-134608240257984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-134608240257984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-134608240257984 | CRITICAL_OP: finalize_polygon | points=2
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:275 | Thread-134608240257984 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-01 14:00:45 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:279 | Thread-134608240257984 | finalize_polygon() aborted - less than 3 points
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-134608240257984 | CRITICAL_OP: finalize_polygon | points=3
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:275 | Thread-134608240257984 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:304 | Thread-134608240257984 | finalize_polygon() - emitting polygonFinished signal for 8703828c-ffac-4d5f-b641-23986f9c672b
2026-01-01 14:00:45 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:308 | Thread-134608240257984 | Interpretation polygon finalized with 3 vertices, ID: 8703828c-ffac-4d5f-b641-23986f9c672b
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:311 | Thread-134608240257984 | finalize_polygon() completed
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-134608240257984 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:159 | Thread-134608240257984 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-134608240257984 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:181 | Thread-134608240257984 | ProfileInterpretationTool.reset() completed
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-134608240257984 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:159 | Thread-134608240257984 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-134608240257984 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:181 | Thread-134608240257984 | ProfileInterpretationTool.reset() completed
2026-01-01 14:00:45 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:111 | Thread-134608240257984 | Failed to create locator for layer layer1: mock error
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:139 | Thread-134608240257984 | ProfileInterpretationTool.activate() called
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:142 | Thread-134608240257984 | ProfileInterpretationTool activated successfully
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:147 | Thread-134608240257984 | ProfileInterpretationTool.deactivate() called
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:159 | Thread-134608240257984 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-134608240257984 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:181 | Thread-134608240257984 | ProfileInterpretationTool.reset() completed
2026-01-01 14:00:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:150 | Thread-134608240257984 | ProfileInterpretationTool deactivated successfully
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-135858127264704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-135858127264704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-135858127264704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-135858127264704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-135858127264704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-135858127264704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-135858127264704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-135858127264704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-135858127264704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-135858127264704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-135858127264704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-135858127264704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-135858127264704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-135858127264704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-135858127264704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-135858127264704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-135858127264704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-135858127264704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-135858127264704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-135858127264704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-135858127264704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-135858127264704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-135858127264704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-135858127264704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-135858127264704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-135858127264704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-135858127264704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-135858127264704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-135858127264704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-135858127264704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-135858127264704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-135858127264704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-135858127264704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-135858127264704 | CRITICAL_OP: finalize_polygon | points=2
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:275 | Thread-135858127264704 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-01 14:01:07 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:279 | Thread-135858127264704 | finalize_polygon() aborted - less than 3 points
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-135858127264704 | CRITICAL_OP: finalize_polygon | points=3
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:275 | Thread-135858127264704 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:304 | Thread-135858127264704 | finalize_polygon() - emitting polygonFinished signal for f3c2258f-0f6e-4179-9ebc-ac6f282a88f1
2026-01-01 14:01:07 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:308 | Thread-135858127264704 | Interpretation polygon finalized with 3 vertices, ID: f3c2258f-0f6e-4179-9ebc-ac6f282a88f1
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:311 | Thread-135858127264704 | finalize_polygon() completed
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-135858127264704 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:159 | Thread-135858127264704 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-135858127264704 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:181 | Thread-135858127264704 | ProfileInterpretationTool.reset() completed
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-135858127264704 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:159 | Thread-135858127264704 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-135858127264704 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:181 | Thread-135858127264704 | ProfileInterpretationTool.reset() completed
2026-01-01 14:01:07 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:111 | Thread-135858127264704 | Failed to create locator for layer layer1: mock error
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:139 | Thread-135858127264704 | ProfileInterpretationTool.activate() called
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:142 | Thread-135858127264704 | ProfileInterpretationTool activated successfully
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:147 | Thread-135858127264704 | ProfileInterpretationTool.deactivate() called
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:159 | Thread-135858127264704 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-135858127264704 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:181 | Thread-135858127264704 | ProfileInterpretationTool.reset() completed
2026-01-01 14:01:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:150 | Thread-135858127264704 | ProfileInterpretationTool deactivated successfully
2026-01-01 14:01:45 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-129469149084608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:45 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-129469149084608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:45 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-129469149084608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:45 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-129469149084608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:45 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-129469149084608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:45 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-129469149084608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:45 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-129469149084608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:45 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-129469149084608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:45 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-129469149084608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:45 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-129469149084608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:45 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-129469149084608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:01:45 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-129469149084608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:02:54 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-137495613627328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:02:54 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-137495613627328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:02:54 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-137495613627328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:02:54 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-137495613627328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:02:54 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-137495613627328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:02:54 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-137495613627328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:02:54 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-137495613627328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:02:54 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-137495613627328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:02:54 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-137495613627328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:02:54 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-137495613627328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:02:54 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-137495613627328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:02:54 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-137495613627328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:02:54 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:275 | Thread-137495613627328 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 271, in export
    feat.setAttributes([axis_names[i]])
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttributes'. Did you mean: 'attributes'?
2026-01-01 14:02:54 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:275 | Thread-137495613627328 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 271, in export
    feat.setAttributes([axis_names[i]])
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttributes'. Did you mean: 'attributes'?
2026-01-01 14:02:54 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:64 | Thread-137495613627328 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:02:54 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:100 | Thread-137495613627328 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 92, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:02:54 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:169 | Thread-137495613627328 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 160, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 92, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:02:54 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:275 | Thread-137495613627328 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 264, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 160, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 92, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:02:54 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:100 | Thread-137495613627328 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 95, in export
    feat = self._create_geology_feature(segment, fields)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 129, in _create_geology_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-01 14:02:54 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:64 | Thread-137495613627328 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 61, in export
    feat.setAttributes([1])
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttributes'. Did you mean: 'attributes'?
2026-01-01 14:02:54 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:169 | Thread-137495613627328 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 163, in export
    feat = self._create_structure_feature(m, fields, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 199, in _create_structure_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-01 14:04:05 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-124131831221184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:05 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-124131831221184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:05 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-124131831221184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:05 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-124131831221184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:05 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-124131831221184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:05 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-124131831221184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:05 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-124131831221184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:05 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-124131831221184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:05 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-124131831221184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:05 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-124131831221184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:05 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-124131831221184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:05 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-124131831221184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:05 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:275 | Thread-124131831221184 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 271, in export
    feat.setAttributes([axis_names[i]])
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttributes'. Did you mean: 'attributes'?
2026-01-01 14:04:05 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:275 | Thread-124131831221184 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 271, in export
    feat.setAttributes([axis_names[i]])
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttributes'. Did you mean: 'attributes'?
2026-01-01 14:04:05 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:64 | Thread-124131831221184 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:04:05 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:100 | Thread-124131831221184 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 92, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:04:05 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:169 | Thread-124131831221184 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 160, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 92, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:04:05 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:275 | Thread-124131831221184 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 264, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 160, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 92, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:04:05 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:100 | Thread-124131831221184 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 95, in export
    feat = self._create_geology_feature(segment, fields)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 130, in _create_geology_feature
    feat.setAttribute(idx, val)
    ^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttribute'
2026-01-01 14:04:05 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:64 | Thread-124131831221184 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 61, in export
    feat.setAttributes([1])
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttributes'. Did you mean: 'attributes'?
2026-01-01 14:04:05 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:169 | Thread-124131831221184 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 163, in export
    feat = self._create_structure_feature(m, fields, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 200, in _create_structure_feature
    feat.setAttribute(idx, val)
    ^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttribute'
2026-01-01 14:04:32 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-129178612960192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:32 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-129178612960192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-129178612960192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-129178612960192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:32 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-129178612960192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:32 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-129178612960192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:32 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-129178612960192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:32 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-129178612960192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:32 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-129178612960192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:32 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-129178612960192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:32 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-129178612960192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:32 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-129178612960192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:32 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:275 | Thread-129178612960192 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 271, in export
    feat.setAttributes([axis_names[i]])
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttributes'. Did you mean: 'attributes'?
2026-01-01 14:04:32 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:275 | Thread-129178612960192 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 271, in export
    feat.setAttributes([axis_names[i]])
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttributes'. Did you mean: 'attributes'?
2026-01-01 14:04:32 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:64 | Thread-129178612960192 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:04:32 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:100 | Thread-129178612960192 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 92, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:04:32 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:169 | Thread-129178612960192 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 160, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 92, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:04:32 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:275 | Thread-129178612960192 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 264, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 160, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 92, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:04:32 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:100 | Thread-129178612960192 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 95, in export
    feat = self._create_geology_feature(segment, fields)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 130, in _create_geology_feature
    feat.setAttribute(idx, val)
    ^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttribute'
2026-01-01 14:04:32 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:169 | Thread-129178612960192 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 163, in export
    feat = self._create_structure_feature(m, fields, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 200, in _create_structure_feature
    feat.setAttribute(idx, val)
    ^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttribute'
2026-01-01 14:04:59 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-130414830164928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:59 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-130414830164928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-130414830164928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-130414830164928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:59 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-130414830164928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:59 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-130414830164928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:59 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-130414830164928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:59 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-130414830164928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:59 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-130414830164928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:59 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-130414830164928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:59 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-130414830164928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:59 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-130414830164928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:04:59 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:276 | Thread-130414830164928 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 272, in export
    feat.setAttributes([axis_names[i]])
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttributes'. Did you mean: 'attributes'?
2026-01-01 14:04:59 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:276 | Thread-130414830164928 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 272, in export
    feat.setAttributes([axis_names[i]])
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttributes'. Did you mean: 'attributes'?
2026-01-01 14:04:59 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:65 | Thread-130414830164928 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:04:59 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:101 | Thread-130414830164928 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 93, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:04:59 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:170 | Thread-130414830164928 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 161, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 93, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:04:59 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:276 | Thread-130414830164928 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 265, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 161, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 93, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:04:59 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:101 | Thread-130414830164928 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 96, in export
    feat = self._create_geology_feature(segment, fields)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 131, in _create_geology_feature
    feat.setAttribute(idx, val)
    ^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttribute'
2026-01-01 14:04:59 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:170 | Thread-130414830164928 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 164, in export
    feat = self._create_structure_feature(m, fields, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 201, in _create_structure_feature
    feat.setAttribute(idx, val)
    ^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttribute'
2026-01-01 14:05:24 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-136948445125568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:05:24 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-136948445125568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:05:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-136948445125568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:05:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-136948445125568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:05:24 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-136948445125568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:05:24 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-136948445125568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:05:24 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-136948445125568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:05:24 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-136948445125568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:05:24 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-136948445125568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:05:24 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-136948445125568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:05:24 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-136948445125568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:05:24 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-136948445125568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:05:24 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:277 | Thread-136948445125568 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 273, in export
    feat.setAttributes([axis_names[i]])
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttributes'. Did you mean: 'attributes'?
2026-01-01 14:05:24 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:277 | Thread-136948445125568 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 273, in export
    feat.setAttributes([axis_names[i]])
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttributes'. Did you mean: 'attributes'?
2026-01-01 14:05:24 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:66 | Thread-136948445125568 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 58, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:05:24 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:102 | Thread-136948445125568 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 94, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 58, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:05:24 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:171 | Thread-136948445125568 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 162, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 94, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 58, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:05:24 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:277 | Thread-136948445125568 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 266, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 162, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 94, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 58, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:05:24 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:102 | Thread-136948445125568 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 97, in export
    feat = self._create_geology_feature(segment, fields)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 132, in _create_geology_feature
    feat.setAttribute(idx, val)
    ^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttribute'
2026-01-01 14:05:24 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:171 | Thread-136948445125568 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 165, in export
    feat = self._create_structure_feature(m, fields, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 202, in _create_structure_feature
    feat.setAttribute(idx, val)
    ^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttribute'
2026-01-01 14:05:58 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-137835127536576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:05:58 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-137835127536576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:05:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-137835127536576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:05:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-137835127536576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:05:58 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-137835127536576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:05:58 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-137835127536576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:05:58 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-137835127536576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:05:58 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-137835127536576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:05:58 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-137835127536576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:05:58 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-137835127536576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:05:58 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-137835127536576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:05:58 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-137835127536576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:05:58 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:271 | Thread-137835127536576 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 267, in export
    feat.setAttributes([axis_names[i]])
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttributes'. Did you mean: 'attributes'?
2026-01-01 14:05:58 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:271 | Thread-137835127536576 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 267, in export
    feat.setAttributes([axis_names[i]])
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttributes'. Did you mean: 'attributes'?
2026-01-01 14:05:58 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:96 | Thread-137835127536576 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 91, in export
    feat = self._create_geology_feature(segment, fields)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 126, in _create_geology_feature
    feat.setAttribute(idx, val)
    ^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttribute'
2026-01-01 14:05:58 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:165 | Thread-137835127536576 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 159, in export
    feat = self._create_structure_feature(m, fields, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 196, in _create_structure_feature
    feat.setAttribute(idx, val)
    ^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttribute'
2026-01-01 14:06:10 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-129599794101184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:06:10 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-129599794101184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:06:10 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-129599794101184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:06:10 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-129599794101184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:06:10 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-129599794101184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:06:10 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-129599794101184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:06:10 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-129599794101184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:06:10 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-129599794101184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:06:10 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-129599794101184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:06:10 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-129599794101184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:06:10 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-129599794101184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:06:10 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-129599794101184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:06:10 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:271 | Thread-129599794101184 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 267, in export
    feat.setAttributes([axis_names[i]])
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttributes'. Did you mean: 'attributes'?
2026-01-01 14:06:10 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:271 | Thread-129599794101184 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 267, in export
    feat.setAttributes([axis_names[i]])
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttributes'. Did you mean: 'attributes'?
2026-01-01 14:06:10 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:96 | Thread-129599794101184 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 91, in export
    feat = self._create_geology_feature(segment, fields)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 126, in _create_geology_feature
    feat.setAttribute(idx, val)
    ^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttribute'
2026-01-01 14:06:10 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:165 | Thread-129599794101184 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 159, in export
    feat = self._create_structure_feature(m, fields, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 196, in _create_structure_feature
    feat.setAttribute(idx, val)
    ^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttribute'
2026-01-01 14:07:16 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-135845754969024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:07:16 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-135845754969024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:07:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-135845754969024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:07:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-135845754969024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:07:16 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-135845754969024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:07:16 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-135845754969024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:07:16 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-135845754969024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:07:16 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-135845754969024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:07:16 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-135845754969024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:07:16 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-135845754969024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:07:16 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-135845754969024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:07:16 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-135845754969024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:07:16 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:277 | Thread-135845754969024 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 273, in export
    feat.setAttributes([axis_names[i]])
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttributes'. Did you mean: 'attributes'?
2026-01-01 14:07:16 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:277 | Thread-135845754969024 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 273, in export
    feat.setAttributes([axis_names[i]])
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttributes'. Did you mean: 'attributes'?
2026-01-01 14:07:16 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:66 | Thread-135845754969024 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 58, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:07:16 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:102 | Thread-135845754969024 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 94, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 58, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:07:16 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:171 | Thread-135845754969024 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 162, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 94, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 58, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:07:16 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:277 | Thread-135845754969024 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 266, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 162, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 94, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 58, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:07:16 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:102 | Thread-135845754969024 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 97, in export
    feat = self._create_geology_feature(segment, fields)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 132, in _create_geology_feature
    feat.setAttribute(idx, val)
    ^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttribute'
2026-01-01 14:07:16 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:171 | Thread-135845754969024 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 165, in export
    feat = self._create_structure_feature(m, fields, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 202, in _create_structure_feature
    feat.setAttribute(idx, val)
    ^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttribute'
2026-01-01 14:07:38 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-140307053427648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:07:38 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-140307053427648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:07:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-140307053427648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:07:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-140307053427648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:07:38 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-140307053427648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:07:38 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-140307053427648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:07:38 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-140307053427648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:07:38 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-140307053427648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:07:38 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-140307053427648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:07:38 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-140307053427648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:07:38 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-140307053427648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:07:38 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-140307053427648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:07:38 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:278 | Thread-140307053427648 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 274, in export
    feat.setAttributes([axis_names[i]])
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttributes'. Did you mean: 'attributes'?
2026-01-01 14:07:38 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:278 | Thread-140307053427648 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 274, in export
    feat.setAttributes([axis_names[i]])
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttributes'. Did you mean: 'attributes'?
2026-01-01 14:07:38 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-140307053427648 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 59, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:07:38 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:103 | Thread-140307053427648 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 95, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 59, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:07:38 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:172 | Thread-140307053427648 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 163, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 95, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 59, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:07:38 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:278 | Thread-140307053427648 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 267, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 163, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 95, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 59, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:07:38 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:103 | Thread-140307053427648 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 98, in export
    feat = self._create_geology_feature(segment, fields)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 133, in _create_geology_feature
    feat.setAttribute(idx, val)
    ^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttribute'
2026-01-01 14:07:38 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:172 | Thread-140307053427648 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 166, in export
    feat = self._create_structure_feature(m, fields, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 203, in _create_structure_feature
    feat.setAttribute(idx, val)
    ^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttribute'
2026-01-01 14:08:14 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-125099653307328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:08:14 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-125099653307328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:08:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-125099653307328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:08:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-125099653307328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:08:14 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-125099653307328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:08:14 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-125099653307328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:08:14 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-125099653307328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:08:14 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-125099653307328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:08:14 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-125099653307328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:08:14 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-125099653307328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:08:14 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-125099653307328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:08:14 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-125099653307328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:08:43 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-125822207048640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:08:43 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-125822207048640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:08:43 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-125822207048640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:08:43 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-125822207048640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:08:43 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-125822207048640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:08:43 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-125822207048640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:08:43 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-125822207048640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:08:43 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-125822207048640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:08:43 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-125822207048640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:08:43 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-125822207048640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:08:43 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-125822207048640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:08:43 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-125822207048640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:08:43 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:278 | Thread-125822207048640 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 274, in export
    feat.setAttributes([axis_names[i]])
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttributes'. Did you mean: 'attributes'?
2026-01-01 14:08:43 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:278 | Thread-125822207048640 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 274, in export
    feat.setAttributes([axis_names[i]])
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttributes'. Did you mean: 'attributes'?
2026-01-01 14:08:43 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-125822207048640 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 59, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:08:43 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:103 | Thread-125822207048640 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 95, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 59, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:08:43 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:172 | Thread-125822207048640 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 163, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 95, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 59, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:08:43 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:278 | Thread-125822207048640 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 267, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 163, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 95, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 59, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:08:43 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:103 | Thread-125822207048640 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 98, in export
    feat = self._create_geology_feature(segment, fields)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 133, in _create_geology_feature
    feat.setAttribute(idx, val)
    ^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttribute'
2026-01-01 14:08:43 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:172 | Thread-125822207048640 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 166, in export
    feat = self._create_structure_feature(m, fields, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 203, in _create_structure_feature
    feat.setAttribute(idx, val)
    ^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttribute'
2026-01-01 14:09:03 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-136404019248064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:03 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-136404019248064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:03 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-136404019248064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:03 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-136404019248064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:03 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-136404019248064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:03 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-136404019248064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:03 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-136404019248064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:03 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-136404019248064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:03 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-136404019248064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:03 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-136404019248064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:03 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-136404019248064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:03 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-136404019248064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:03 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:278 | Thread-136404019248064 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 274, in export
    feat.setAttributes([axis_names[i]])
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttributes'. Did you mean: 'attributes'?
2026-01-01 14:09:03 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:278 | Thread-136404019248064 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 274, in export
    feat.setAttributes([axis_names[i]])
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttributes'. Did you mean: 'attributes'?
2026-01-01 14:09:03 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-136404019248064 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 59, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:09:03 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:103 | Thread-136404019248064 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 95, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 59, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:09:03 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:172 | Thread-136404019248064 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 163, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 95, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 59, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:09:03 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:278 | Thread-136404019248064 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 267, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 163, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 95, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 59, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:09:03 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:103 | Thread-136404019248064 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 98, in export
    feat = self._create_geology_feature(segment, fields)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 133, in _create_geology_feature
    feat.setAttribute(idx, val)
    ^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttribute'
2026-01-01 14:09:03 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:172 | Thread-136404019248064 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 166, in export
    feat = self._create_structure_feature(m, fields, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 203, in _create_structure_feature
    feat.setAttribute(idx, val)
    ^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttribute'
2026-01-01 14:09:15 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-139629569940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:15 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-139629569940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-139629569940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-139629569940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:15 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-139629569940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:15 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-139629569940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:15 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-139629569940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:15 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-139629569940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:15 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-139629569940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:15 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-139629569940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:15 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-139629569940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:15 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-139629569940416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:15 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:278 | Thread-139629569940416 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 274, in export
    feat.setAttributes([axis_names[i]])
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttributes'. Did you mean: 'attributes'?
2026-01-01 14:09:15 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:278 | Thread-139629569940416 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 274, in export
    feat.setAttributes([axis_names[i]])
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttributes'. Did you mean: 'attributes'?
2026-01-01 14:09:15 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-139629569940416 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 59, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:09:15 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:103 | Thread-139629569940416 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 95, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 59, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:09:15 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:172 | Thread-139629569940416 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 163, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 95, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 59, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:09:15 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:278 | Thread-139629569940416 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 267, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 163, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 95, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 59, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:09:15 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:103 | Thread-139629569940416 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 98, in export
    feat = self._create_geology_feature(segment, fields)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 133, in _create_geology_feature
    feat.setAttribute(idx, val)
    ^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttribute'
2026-01-01 14:09:15 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:172 | Thread-139629569940416 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 166, in export
    feat = self._create_structure_feature(m, fields, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 203, in _create_structure_feature
    feat.setAttribute(idx, val)
    ^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttribute'
2026-01-01 14:09:57 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-140584494160832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:57 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-140584494160832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:57 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-140584494160832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:57 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-140584494160832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:57 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-140584494160832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:57 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-140584494160832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:57 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-140584494160832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:57 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-140584494160832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:57 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-140584494160832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:57 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-140584494160832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:57 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-140584494160832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:57 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-140584494160832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:09:57 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:287 | Thread-140584494160832 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 283, in export
    feat.setAttributes([axis_names[i]])
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttributes'. Did you mean: 'attributes'?
2026-01-01 14:09:57 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:287 | Thread-140584494160832 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 283, in export
    feat.setAttributes([axis_names[i]])
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttributes'. Did you mean: 'attributes'?
2026-01-01 14:09:57 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:75 | Thread-140584494160832 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 65, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:09:57 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:112 | Thread-140584494160832 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 104, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 65, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:09:57 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:181 | Thread-140584494160832 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 172, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 104, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 65, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:09:57 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:287 | Thread-140584494160832 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 276, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 172, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 104, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 65, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:09:57 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:112 | Thread-140584494160832 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 107, in export
    feat = self._create_geology_feature(segment, fields)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 142, in _create_geology_feature
    feat.setAttribute(idx, val)
    ^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttribute'
2026-01-01 14:09:57 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:181 | Thread-140584494160832 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 175, in export
    feat = self._create_structure_feature(m, fields, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 212, in _create_structure_feature
    feat.setAttribute(idx, val)
    ^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttribute'
2026-01-01 14:11:28 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-140664223554496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:11:28 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-140664223554496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:11:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-140664223554496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:11:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-140664223554496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:11:28 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-140664223554496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:11:28 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-140664223554496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:11:28 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-140664223554496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:11:28 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-140664223554496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:11:28 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-140664223554496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:11:28 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-140664223554496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:11:28 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-140664223554496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:11:28 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-140664223554496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:11:28 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:287 | Thread-140664223554496 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 283, in export
    feat.setAttributes([axis_names[i]])
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttributes'. Did you mean: 'attributes'?
2026-01-01 14:11:28 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:287 | Thread-140664223554496 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 283, in export
    feat.setAttributes([axis_names[i]])
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttributes'. Did you mean: 'attributes'?
2026-01-01 14:11:28 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:75 | Thread-140664223554496 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 65, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:11:28 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:112 | Thread-140664223554496 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 104, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 65, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:11:28 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:181 | Thread-140664223554496 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 172, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 104, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 65, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:11:28 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:287 | Thread-140664223554496 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 276, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 172, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 104, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 65, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:11:28 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:112 | Thread-140664223554496 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 107, in export
    feat = self._create_geology_feature(segment, fields)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 142, in _create_geology_feature
    feat.setAttribute(idx, val)
    ^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttribute'
2026-01-01 14:11:28 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:181 | Thread-140664223554496 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 175, in export
    feat = self._create_structure_feature(m, fields, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 212, in _create_structure_feature
    feat.setAttribute(idx, val)
    ^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttribute'
2026-01-01 14:11:39 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-126042945465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:11:39 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-126042945465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:11:39 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-126042945465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:11:39 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-126042945465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:11:39 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-126042945465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:11:39 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-126042945465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:11:39 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-126042945465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:11:39 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-126042945465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:11:39 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-126042945465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:11:39 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-126042945465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:11:39 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-126042945465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:11:39 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-126042945465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:11:39 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:287 | Thread-126042945465280 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 283, in export
    feat.setAttributes([axis_names[i]])
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttributes'. Did you mean: 'attributes'?
2026-01-01 14:11:39 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:287 | Thread-126042945465280 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 283, in export
    feat.setAttributes([axis_names[i]])
    ^^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttributes'. Did you mean: 'attributes'?
2026-01-01 14:11:39 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:75 | Thread-126042945465280 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 65, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:11:39 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:112 | Thread-126042945465280 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 104, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 65, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:11:39 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:181 | Thread-126042945465280 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 172, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 104, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 65, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:11:39 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:287 | Thread-126042945465280 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 276, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 172, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 104, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 65, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:11:39 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:112 | Thread-126042945465280 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 107, in export
    feat = self._create_geology_feature(segment, fields)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 142, in _create_geology_feature
    feat.setAttribute(idx, val)
    ^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttribute'
2026-01-01 14:11:39 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:181 | Thread-126042945465280 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 175, in export
    feat = self._create_structure_feature(m, fields, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 212, in _create_structure_feature
    feat.setAttribute(idx, val)
    ^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttribute'
2026-01-01 14:12:59 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-127251938147264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:12:59 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-127251938147264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:12:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-127251938147264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:12:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-127251938147264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:12:59 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-127251938147264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:12:59 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-127251938147264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:12:59 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-127251938147264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:12:59 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-127251938147264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:12:59 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-127251938147264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:12:59 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-127251938147264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:12:59 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-127251938147264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:12:59 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-127251938147264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:12:59 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:64 | Thread-127251938147264 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:12:59 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:100 | Thread-127251938147264 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 92, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:12:59 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:169 | Thread-127251938147264 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 160, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 92, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:12:59 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:275 | Thread-127251938147264 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 264, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 160, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 92, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:12:59 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:100 | Thread-127251938147264 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 95, in export
    feat = self._create_geology_feature(segment, fields)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 130, in _create_geology_feature
    feat.setAttribute(idx, val)
    ^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttribute'. Did you mean: 'setAttributes'?
2026-01-01 14:12:59 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:169 | Thread-127251938147264 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 163, in export
    feat = self._create_structure_feature(m, fields, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 200, in _create_structure_feature
    feat.setAttribute(idx, val)
    ^^^^^^^^^^^^^^^^^
AttributeError: 'MockQgsFeature' object has no attribute 'setAttribute'. Did you mean: 'setAttributes'?
2026-01-01 14:13:23 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-128408910482368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:13:23 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-128408910482368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:13:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-128408910482368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:13:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-128408910482368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:13:23 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-128408910482368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:13:23 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-128408910482368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:13:23 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-128408910482368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:13:23 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-128408910482368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:13:23 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-128408910482368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:13:23 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-128408910482368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:13:23 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-128408910482368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:13:23 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-128408910482368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:13:23 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:64 | Thread-128408910482368 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:13:23 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:100 | Thread-128408910482368 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 92, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:13:23 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:169 | Thread-128408910482368 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 160, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 92, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:13:23 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:275 | Thread-128408910482368 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 264, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 160, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 92, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:13:50 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-128248921414592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:13:50 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-128248921414592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:13:50 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-128248921414592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:13:50 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-128248921414592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:13:50 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-128248921414592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:13:50 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-128248921414592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:13:50 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-128248921414592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:13:50 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-128248921414592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:13:50 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-128248921414592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:13:50 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-128248921414592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:13:50 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-128248921414592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:13:50 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-128248921414592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:13:50 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:64 | Thread-128248921414592 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:13:50 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:100 | Thread-128248921414592 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 92, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:13:50 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:169 | Thread-128248921414592 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 160, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 92, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:13:50 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:275 | Thread-128248921414592 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 264, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 160, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 92, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-128282554923968 | Config set: /SecInterp/scale = 500.0
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-128282554923968 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-128282554923968 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-128282554923968 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 14:14:07 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-128282554923968 | Config set: /SecInterp/last_output_dir =
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-128282554923968 | Config set: /SecInterp/dpi = 300
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-128282554923968 | Config set: /SecInterp/preview_width = 800
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-128282554923968 | Config set: /SecInterp/preview_height = 600
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-128282554923968 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-128282554923968 | Config set: /SecInterp/export_quality = 95
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-128282554923968 | Config set: /SecInterp/auto_lod = True
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-128282554923968 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-128282554923968 | Configuration reset to defaults
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-128282554923968 | Config set: /SecInterp/scale = 200.0
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-128282554923968 | CacheService initialized (Default TTL: 3600s)
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-128282554923968 | CacheService initialized (Default TTL: 3600s)
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-128282554923968 | CacheService initialized (Default TTL: 3600s)
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:79 | Thread-128282554923968 | Projecting collars from Test Layer with buffer 50.0m
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:94 | Thread-128282554923968 | No collars found within buffer area.
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:79 | Thread-128282554923968 | Projecting collars from Test Layer with buffer 50.0m
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:115 | Thread-128282554923968 | DrillholeService.project_collars END: Found 1 collars.
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-128282554923968 | ✓ Saving profile axes...
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-128282554923968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-128282554923968 | ✓ Saving topographic profile...
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-128282554923968 | ✓ Saving interpretation data...
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:214 | Thread-128282554923968 | 3D Export features are restricted for this user.
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-128282554923968 | ✓ Saving profile axes...
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-128282554923968 | ✓ Saving topographic profile...
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-128282554923968 | ✓ Saving interpretation data...
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:197 | Thread-128282554923968 | ✓ Saving 3D interpretation data...
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-128282554923968 | ✓ Saving profile axes...
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-128282554923968 | ✓ Saving topographic profile...
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:111 | Thread-128282554923968 | ✓ Saving geological profile...
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:131 | Thread-128282554923968 | ✓ Saving structural profile...
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:165 | Thread-128282554923968 | ✓ Saving drillhole data...
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-128282554923968 | ✓ Saving interpretation data...
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:31 | Thread-128282554923968 | Access denied for restricted feature: 3D Export
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:214 | Thread-128282554923968 | 3D Export features are restricted for this user.
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-128282554923968 | ✓ Saving profile axes...
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-128282554923968 | ✓ Saving topographic profile...
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-128282554923968 | ✓ Saving profile axes...
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:165 | Thread-128282554923968 | ✓ Saving drillhole data...
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:111 | Thread-128282554923968 | ✓ Saving geological profile...
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-128282554923968 | ✓ Saving interpretation data...
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:197 | Thread-128282554923968 | ✓ Saving 3D interpretation data...
2026-01-01 14:14:08 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-128282554923968 | Invalid section line layer, skipping 3D export.
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-128282554923968 | ✓ Saving interpretation data...
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:131 | Thread-128282554923968 | ✓ Saving structural profile...
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-128282554923968 | ✓ Saving topographic profile...
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:163 | Thread-128282554923968 | Generating master profile with interval=10.00
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:133 | Thread-128282554923968 | Generated 1 geological segments
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:163 | Thread-128282554923968 | Generating master profile with interval=50.00
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:60 | Thread-128282554923968 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:60 | Thread-128282554923968 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:165 | Thread-128282554923968 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:67 | Thread-128282554923968 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:67 | Thread-128282554923968 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:106 | Thread-128282554923968 | Running geometry operation: test
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:257 | Thread-128282554923968 | Generated 1 drillhole traces
2026-01-01 14:14:08 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:251 | Thread-128282554923968 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 233, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-01 14:14:08 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-128282554923968 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 233, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 233, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:257 | Thread-128282554923968 | Generated 1 drillhole traces
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:174 | Thread-128282554923968 | Drillhole preview skipped: No Collar ID field selected.
2026-01-01 14:14:08 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:64 | Thread-128282554923968 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:14:08 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:100 | Thread-128282554923968 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 92, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:14:08 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:169 | Thread-128282554923968 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 160, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 92, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:14:08 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:275 | Thread-128282554923968 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 264, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 160, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 92, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:14:08 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:155 | Thread-128282554923968 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 153, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:94 | Thread-128282554923968 | Analyzing structures in Structure Layer with buffer 10m
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:127 | Thread-128282554923968 | Processed 1 structural measurements from Structure Layer
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:374 | Thread-128282554923968 | Cache cleared by user
2026-01-01 14:14:08 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-128282554923968 | Test Title: Test Message
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-128282554923968 | Test Title: Test Message
2026-01-01 14:14:08 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-128282554923968 | Test Title: Test Message
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-128282554923968 | CRITICAL_OP: finalize_polygon | points=2
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:275 | Thread-128282554923968 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-01 14:14:08 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:279 | Thread-128282554923968 | finalize_polygon() aborted - less than 3 points
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-128282554923968 | CRITICAL_OP: finalize_polygon | points=3
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:275 | Thread-128282554923968 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:304 | Thread-128282554923968 | finalize_polygon() - emitting polygonFinished signal for 62b6d4d8-05d9-4f36-bac3-b6e553c9ae8e
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:308 | Thread-128282554923968 | Interpretation polygon finalized with 3 vertices, ID: 62b6d4d8-05d9-4f36-bac3-b6e553c9ae8e
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:311 | Thread-128282554923968 | finalize_polygon() completed
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-128282554923968 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:159 | Thread-128282554923968 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-128282554923968 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:181 | Thread-128282554923968 | ProfileInterpretationTool.reset() completed
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-128282554923968 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:159 | Thread-128282554923968 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-128282554923968 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:181 | Thread-128282554923968 | ProfileInterpretationTool.reset() completed
2026-01-01 14:14:08 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:111 | Thread-128282554923968 | Failed to create locator for layer layer1: mock error
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:139 | Thread-128282554923968 | ProfileInterpretationTool.activate() called
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:142 | Thread-128282554923968 | ProfileInterpretationTool activated successfully
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:147 | Thread-128282554923968 | ProfileInterpretationTool.deactivate() called
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:159 | Thread-128282554923968 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-128282554923968 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:181 | Thread-128282554923968 | ProfileInterpretationTool.reset() completed
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:150 | Thread-128282554923968 | ProfileInterpretationTool deactivated successfully
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:243 | Thread-128282554923968 | Point 1 added: 0.00, 0.00
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:243 | Thread-128282554923968 | Point 2 added: 100.00, 100.00
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:243 | Thread-128282554923968 | Point 1 added: 50.00, 50.00
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-128282554923968 | reset() called, finalized=False
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-128282554923968 | finalize_measurement called with 1 points
2026-01-01 14:14:08 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:259 | Thread-128282554923968 | Cannot finalize measurement with less than 2 points
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-128282554923968 | finalize_measurement called with 2 points
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-128282554923968 | Setting finalized = True
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:271 | Thread-128282554923968 | Measurement finalized: 2 points, 100.00m total distance
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:286 | Thread-128282554923968 | Switching to pan tool to stop measurement
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:289 | Thread-128282554923968 | Pan tool activated - measurement should be frozen
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:197 | Thread-128282554923968 | Ignoring click - measurement is finalized
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-128282554923968 | finalize_measurement called with 2 points
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-128282554923968 | Setting finalized = True
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:271 | Thread-128282554923968 | Measurement finalized: 2 points, 100.00m total distance
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:286 | Thread-128282554923968 | Switching to pan tool to stop measurement
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:289 | Thread-128282554923968 | Pan tool activated - measurement should be frozen
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-128282554923968 | reset() called, finalized=False
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-128282554923968 | reset() called, finalized=False
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-128282554923968 | reset() called, finalized=True
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:158 | Thread-128282554923968 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-128282554923968 | reset() called, finalized=False
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-128282554923968 | finalize_measurement called with 2 points
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-128282554923968 | Setting finalized = True
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:271 | Thread-128282554923968 | Measurement finalized: 2 points, 100.00m total distance
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-128282554923968 | Rubber band redrawn with final points only
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:286 | Thread-128282554923968 | Switching to pan tool to stop measurement
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:289 | Thread-128282554923968 | Pan tool activated - measurement should be frozen
2026-01-01 14:14:08 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:106 | Thread-128282554923968 | Failed to create locator for layer layer1: mock error
2026-01-01 14:14:08 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:106 | Thread-128282554923968 | Failed to create locator for layer l2: fail
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:141 | Thread-128282554923968 | ProfileMeasureTool activated
2026-01-01 14:14:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-128282554923968 | reset() called, finalized=False
2026-01-01 14:14:08 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:146 | Thread-128282554923968 | ProfileMeasureTool deactivated
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123316964682688 | Config set: /SecInterp/scale = 500.0
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123316964682688 | Config set: /SecInterp/vert_exag = 1.0
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123316964682688 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123316964682688 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123316964682688 | Config set: /SecInterp/last_output_dir =
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123316964682688 | Config set: /SecInterp/dpi = 300
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123316964682688 | Config set: /SecInterp/preview_width = 800
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123316964682688 | Config set: /SecInterp/preview_height = 600
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123316964682688 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123316964682688 | Config set: /SecInterp/export_quality = 95
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123316964682688 | Config set: /SecInterp/auto_lod = True
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123316964682688 | Config set: /SecInterp/max_preview_points = 10000
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:84 | Thread-123316964682688 | Configuration reset to defaults
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.config | set:78 | Thread-123316964682688 | Config set: /SecInterp/scale = 200.0
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-123316964682688 | CacheService initialized (Default TTL: 3600s)
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-123316964682688 | CacheService initialized (Default TTL: 3600s)
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:39 | Thread-123316964682688 | CacheService initialized (Default TTL: 3600s)
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:79 | Thread-123316964682688 | Projecting collars from Test Layer with buffer 50.0m
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:94 | Thread-123316964682688 | No collars found within buffer area.
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:79 | Thread-123316964682688 | Projecting collars from Test Layer with buffer 50.0m
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:115 | Thread-123316964682688 | DrillholeService.project_collars END: Found 1 collars.
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-123316964682688 | ✓ Saving profile axes...
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-123316964682688 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-123316964682688 | ✓ Saving topographic profile...
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-123316964682688 | ✓ Saving interpretation data...
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:214 | Thread-123316964682688 | 3D Export features are restricted for this user.
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-123316964682688 | ✓ Saving profile axes...
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-123316964682688 | ✓ Saving topographic profile...
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-123316964682688 | ✓ Saving interpretation data...
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:197 | Thread-123316964682688 | ✓ Saving 3D interpretation data...
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-123316964682688 | ✓ Saving profile axes...
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-123316964682688 | ✓ Saving topographic profile...
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:111 | Thread-123316964682688 | ✓ Saving geological profile...
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:131 | Thread-123316964682688 | ✓ Saving structural profile...
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:165 | Thread-123316964682688 | ✓ Saving drillhole data...
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-123316964682688 | ✓ Saving interpretation data...
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:31 | Thread-123316964682688 | Access denied for restricted feature: 3D Export
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:214 | Thread-123316964682688 | 3D Export features are restricted for this user.
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-123316964682688 | ✓ Saving profile axes...
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-123316964682688 | ✓ Saving topographic profile...
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-123316964682688 | ✓ Saving profile axes...
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:165 | Thread-123316964682688 | ✓ Saving drillhole data...
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:111 | Thread-123316964682688 | ✓ Saving geological profile...
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-123316964682688 | ✓ Saving interpretation data...
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:197 | Thread-123316964682688 | ✓ Saving 3D interpretation data...
2026-01-01 14:26:58 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-123316964682688 | Invalid section line layer, skipping 3D export.
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-123316964682688 | ✓ Saving interpretation data...
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:131 | Thread-123316964682688 | ✓ Saving structural profile...
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-123316964682688 | ✓ Saving topographic profile...
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:163 | Thread-123316964682688 | Generating master profile with interval=10.00
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:133 | Thread-123316964682688 | Generated 1 geological segments
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:163 | Thread-123316964682688 | Generating master profile with interval=50.00
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:60 | Thread-123316964682688 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:60 | Thread-123316964682688 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:165 | Thread-123316964682688 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:67 | Thread-123316964682688 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:67 | Thread-123316964682688 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:106 | Thread-123316964682688 | Running geometry operation: test
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:257 | Thread-123316964682688 | Generated 1 drillhole traces
2026-01-01 14:26:58 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:251 | Thread-123316964682688 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 233, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-01 14:26:58 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-123316964682688 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 233, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 233, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:257 | Thread-123316964682688 | Generated 1 drillhole traces
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:174 | Thread-123316964682688 | Drillhole preview skipped: No Collar ID field selected.
2026-01-01 14:26:58 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:64 | Thread-123316964682688 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:26:58 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:100 | Thread-123316964682688 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 92, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:26:58 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:169 | Thread-123316964682688 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 160, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 92, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:26:58 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:275 | Thread-123316964682688 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 264, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 160, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 92, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 57, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-01 14:26:58 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:155 | Thread-123316964682688 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 153, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:94 | Thread-123316964682688 | Analyzing structures in Structure Layer with buffer 10m
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:127 | Thread-123316964682688 | Processed 1 structural measurements from Structure Layer
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:374 | Thread-123316964682688 | Cache cleared by user
2026-01-01 14:26:58 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-123316964682688 | Test Title: Test Message
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-123316964682688 | Test Title: Test Message
2026-01-01 14:26:58 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-123316964682688 | Test Title: Test Message
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-123316964682688 | CRITICAL_OP: finalize_polygon | points=2
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:275 | Thread-123316964682688 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-01 14:26:58 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:279 | Thread-123316964682688 | finalize_polygon() aborted - less than 3 points
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-123316964682688 | CRITICAL_OP: finalize_polygon | points=3
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:275 | Thread-123316964682688 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:304 | Thread-123316964682688 | finalize_polygon() - emitting polygonFinished signal for f1e340c1-2313-4f90-ab77-afa912bc305a
2026-01-01 14:26:58 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:308 | Thread-123316964682688 | Interpretation polygon finalized with 3 vertices, ID: f1e340c1-2313-4f90-ab77-afa912bc305a
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:311 | Thread-123316964682688 | finalize_polygon() completed
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-123316964682688 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:159 | Thread-123316964682688 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-123316964682688 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:181 | Thread-123316964682688 | ProfileInterpretationTool.reset() completed
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-123316964682688 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:159 | Thread-123316964682688 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-123316964682688 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-01 14:26:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:181 | Thread-123316964682688 | ProfileInterpretationTool.reset() completed
2026-01-01 14:26:58 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:111 | Thread-123316964682688 | Failed to create locator for layer layer1: mock error
2026-01-01 14:26:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:139 | Thread-123316964682688 | ProfileInterpretationTool.activate() called
2026-01-01 14:26:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:142 | Thread-123316964682688 | ProfileInterpretationTool activated successfully
2026-01-01 14:26:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:147 | Thread-123316964682688 | ProfileInterpretationTool.deactivate() called
2026-01-01 14:26:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:159 | Thread-123316964682688 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-01 14:26:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-123316964682688 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-01 14:26:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:181 | Thread-123316964682688 | ProfileInterpretationTool.reset() completed
2026-01-01 14:26:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:150 | Thread-123316964682688 | ProfileInterpretationTool deactivated successfully
2026-01-01 14:26:59 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:243 | Thread-123316964682688 | Point 1 added: 0.00, 0.00
2026-01-01 14:26:59 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:243 | Thread-123316964682688 | Point 2 added: 100.00, 100.00
2026-01-01 14:26:59 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:243 | Thread-123316964682688 | Point 1 added: 50.00, 50.00
2026-01-01 14:26:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-123316964682688 | reset() called, finalized=False
2026-01-01 14:26:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-123316964682688 | finalize_measurement called with 1 points
2026-01-01 14:26:59 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:259 | Thread-123316964682688 | Cannot finalize measurement with less than 2 points
2026-01-01 14:26:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-123316964682688 | finalize_measurement called with 2 points
2026-01-01 14:26:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-123316964682688 | Setting finalized = True
2026-01-01 14:26:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:271 | Thread-123316964682688 | Measurement finalized: 2 points, 100.00m total distance
2026-01-01 14:26:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:286 | Thread-123316964682688 | Switching to pan tool to stop measurement
2026-01-01 14:26:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:289 | Thread-123316964682688 | Pan tool activated - measurement should be frozen
2026-01-01 14:26:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:197 | Thread-123316964682688 | Ignoring click - measurement is finalized
2026-01-01 14:26:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-123316964682688 | finalize_measurement called with 2 points
2026-01-01 14:26:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-123316964682688 | Setting finalized = True
2026-01-01 14:26:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:271 | Thread-123316964682688 | Measurement finalized: 2 points, 100.00m total distance
2026-01-01 14:26:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:286 | Thread-123316964682688 | Switching to pan tool to stop measurement
2026-01-01 14:26:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:289 | Thread-123316964682688 | Pan tool activated - measurement should be frozen
2026-01-01 14:26:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-123316964682688 | reset() called, finalized=False
2026-01-01 14:26:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-123316964682688 | reset() called, finalized=False
2026-01-01 14:26:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-123316964682688 | reset() called, finalized=True
2026-01-01 14:26:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:158 | Thread-123316964682688 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-01 14:26:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-123316964682688 | reset() called, finalized=False
2026-01-01 14:26:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-123316964682688 | finalize_measurement called with 2 points
2026-01-01 14:26:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-123316964682688 | Setting finalized = True
2026-01-01 14:26:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:271 | Thread-123316964682688 | Measurement finalized: 2 points, 100.00m total distance
2026-01-01 14:26:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-123316964682688 | Rubber band redrawn with final points only
2026-01-01 14:26:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:286 | Thread-123316964682688 | Switching to pan tool to stop measurement
2026-01-01 14:26:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:289 | Thread-123316964682688 | Pan tool activated - measurement should be frozen
2026-01-01 14:26:59 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:106 | Thread-123316964682688 | Failed to create locator for layer layer1: mock error
2026-01-01 14:26:59 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:106 | Thread-123316964682688 | Failed to create locator for layer l2: fail
2026-01-01 14:26:59 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:141 | Thread-123316964682688 | ProfileMeasureTool activated
2026-01-01 14:26:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-123316964682688 | reset() called, finalized=False
2026-01-01 14:26:59 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:146 | Thread-123316964682688 | ProfileMeasureTool deactivated
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-124822001183680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-124822001183680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-124822001183680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-124822001183680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-124822001183680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-124822001183680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-124822001183680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-124822001183680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-124822001183680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-124822001183680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-124822001183680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-124822001183680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-124822001183680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-124822001183680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-124822001183680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-124822001183680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-124822001183680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-124822001183680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-124822001183680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-124822001183680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-124822001183680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-124822001183680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-124822001183680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-124822001183680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-124822001183680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-124822001183680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-124822001183680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-124822001183680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-124822001183680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-124822001183680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-124822001183680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-124822001183680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-124822001183680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:35 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-124822001183680 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:28:35 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:206 | Thread-124822001183680 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 192, in export_to_image
    painter = QPainter(image)
  File "/usr/lib/python3.13/unittest/mock.py", line 2169, in __init__
    _safe_super(MagicMixin, self).__init__(*args, **kw)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1151, in __init__
    _safe_super(CallableMixin, self).__init__(
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        spec, wraps, name, spec_set, parent,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        _spec_state, _new_name, _new_parent, **kwargs
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 484, in __init__
    self._mock_add_spec(spec, spec_set, _spec_as_instance, _eat_self)
    ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 535, in _mock_add_spec
    raise InvalidSpecError(f'Cannot spec a Mock object. [object={spec!r}]')
unittest.mock.InvalidSpecError: Cannot spec a Mock object. [object=<MagicMock name='mock.QImage()' id='124821531891696'>]
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-130896845122496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-130896845122496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-130896845122496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-130896845122496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-130896845122496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-130896845122496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-130896845122496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-130896845122496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-130896845122496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-130896845122496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-130896845122496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-130896845122496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-130896845122496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-130896845122496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-130896845122496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-130896845122496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-130896845122496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-130896845122496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-130896845122496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-130896845122496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-130896845122496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-130896845122496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-130896845122496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-130896845122496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-130896845122496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-130896845122496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-130896845122496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-130896845122496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-130896845122496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-130896845122496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-130896845122496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-130896845122496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-130896845122496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:28:51 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-130896845122496 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:28:51 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:206 | Thread-130896845122496 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 192, in export_to_image
    painter = QPainter(image)
  File "/usr/lib/python3.13/unittest/mock.py", line 2169, in __init__
    _safe_super(MagicMixin, self).__init__(*args, **kw)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1151, in __init__
    _safe_super(CallableMixin, self).__init__(
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        spec, wraps, name, spec_set, parent,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        _spec_state, _new_name, _new_parent, **kwargs
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 484, in __init__
    self._mock_add_spec(spec, spec_set, _spec_as_instance, _eat_self)
    ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 535, in _mock_add_spec
    raise InvalidSpecError(f'Cannot spec a Mock object. [object={spec!r}]')
unittest.mock.InvalidSpecError: Cannot spec a Mock object. [object=<MagicMock name='mock.QImage()' id='130896376255824'>]
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-128651072404416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-128651072404416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-128651072404416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-128651072404416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-128651072404416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-128651072404416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-128651072404416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-128651072404416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-128651072404416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-128651072404416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-128651072404416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-128651072404416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-128651072404416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-128651072404416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-128651072404416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-128651072404416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-128651072404416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-128651072404416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-128651072404416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-128651072404416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-128651072404416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-128651072404416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-128651072404416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-128651072404416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-128651072404416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-128651072404416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-128651072404416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-128651072404416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-128651072404416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-128651072404416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-128651072404416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-128651072404416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-128651072404416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:29:59 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-128651072404416 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:29:59 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:206 | Thread-128651072404416 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 189, in export_to_image
    image = QImage(QSize(width, height), QImage.Format_ARGB32)
                                         ^^^^^^^^^^^^^^^^^^^^
AttributeError: type object 'MagicMock' has no attribute 'Format_ARGB32'
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-137204004334528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-137204004334528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-137204004334528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-137204004334528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-137204004334528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-137204004334528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-137204004334528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-137204004334528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-137204004334528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-137204004334528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-137204004334528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-137204004334528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-137204004334528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-137204004334528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-137204004334528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-137204004334528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-137204004334528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-137204004334528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-137204004334528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-137204004334528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-137204004334528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-137204004334528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-137204004334528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-137204004334528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-137204004334528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-137204004334528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-137204004334528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-137204004334528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-137204004334528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-137204004334528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-137204004334528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-137204004334528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-137204004334528 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:30:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-137204004334528 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:30:17 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:206 | Thread-137204004334528 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 189, in export_to_image
    image = QImage(QSize(width, height), QImage.Format_ARGB32)
                                         ^^^^^^^^^^^^^^^^^^^^
AttributeError: type object 'MagicMock' has no attribute 'Format_ARGB32'
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-124437674585024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-124437674585024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-124437674585024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-124437674585024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-124437674585024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-124437674585024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-124437674585024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-124437674585024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-124437674585024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-124437674585024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-124437674585024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-124437674585024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-124437674585024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-124437674585024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-124437674585024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-124437674585024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-124437674585024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-124437674585024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-124437674585024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-124437674585024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-124437674585024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-124437674585024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-124437674585024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-124437674585024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-124437674585024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-124437674585024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-124437674585024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-124437674585024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-124437674585024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-124437674585024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-124437674585024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-124437674585024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-124437674585024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:16 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-124437674585024 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:31:16 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:206 | Thread-124437674585024 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 189, in export_to_image
    image = QImage(QSize(width, height), QImage.Format_ARGB32)
  File "/usr/lib/python3.13/unittest/mock.py", line 2169, in __init__
    _safe_super(MagicMixin, self).__init__(*args, **kw)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1151, in __init__
    _safe_super(CallableMixin, self).__init__(
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        spec, wraps, name, spec_set, parent,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        _spec_state, _new_name, _new_parent, **kwargs
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 484, in __init__
    self._mock_add_spec(spec, spec_set, _spec_as_instance, _eat_self)
    ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 535, in _mock_add_spec
    raise InvalidSpecError(f'Cannot spec a Mock object. [object={spec!r}]')
unittest.mock.InvalidSpecError: Cannot spec a Mock object. [object=<MagicMock spec='int' id='124437211475856'>]
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-132032848096192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-132032848096192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-132032848096192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-132032848096192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-132032848096192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-132032848096192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-132032848096192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-132032848096192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-132032848096192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-132032848096192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-132032848096192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-132032848096192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-132032848096192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-132032848096192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-132032848096192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-132032848096192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-132032848096192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-132032848096192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-132032848096192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-132032848096192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-132032848096192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-132032848096192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-132032848096192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-132032848096192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-132032848096192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-132032848096192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-132032848096192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-132032848096192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-132032848096192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-132032848096192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-132032848096192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-132032848096192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-132032848096192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-132032848096192 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:31:48 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:206 | Thread-132032848096192 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 189, in export_to_image
    image = QImage(QSize(width, height), QImage.Format_ARGB32)
  File "/usr/lib/python3.13/unittest/mock.py", line 2169, in __init__
    _safe_super(MagicMixin, self).__init__(*args, **kw)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1151, in __init__
    _safe_super(CallableMixin, self).__init__(
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        spec, wraps, name, spec_set, parent,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        _spec_state, _new_name, _new_parent, **kwargs
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 484, in __init__
    self._mock_add_spec(spec, spec_set, _spec_as_instance, _eat_self)
    ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 535, in _mock_add_spec
    raise InvalidSpecError(f'Cannot spec a Mock object. [object={spec!r}]')
unittest.mock.InvalidSpecError: Cannot spec a Mock object. [object=<MagicMock spec='int' id='132032385068944'>]
2026-01-01 14:31:48 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-132032848096192 | render() called
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-137828027284416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-137828027284416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-137828027284416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-137828027284416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-137828027284416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-137828027284416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-137828027284416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-137828027284416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-137828027284416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-137828027284416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-137828027284416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-137828027284416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-137828027284416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-137828027284416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-137828027284416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-137828027284416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-137828027284416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-137828027284416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-137828027284416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-137828027284416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-137828027284416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-137828027284416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-137828027284416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-137828027284416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-137828027284416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-137828027284416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-137828027284416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-137828027284416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-137828027284416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-137828027284416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-137828027284416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-137828027284416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-137828027284416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-137828027284416 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:33:41 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:206 | Thread-137828027284416 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 189, in export_to_image
    image = QImage(QSize(width, height), QImage.Format_ARGB32)
  File "/usr/lib/python3.13/unittest/mock.py", line 2169, in __init__
    _safe_super(MagicMixin, self).__init__(*args, **kw)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1151, in __init__
    _safe_super(CallableMixin, self).__init__(
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        spec, wraps, name, spec_set, parent,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        _spec_state, _new_name, _new_parent, **kwargs
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 484, in __init__
    self._mock_add_spec(spec, spec_set, _spec_as_instance, _eat_self)
    ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 535, in _mock_add_spec
    raise InvalidSpecError(f'Cannot spec a Mock object. [object={spec!r}]')
unittest.mock.InvalidSpecError: Cannot spec a Mock object. [object=<MagicMock spec='int' id='137827562129456'>]
2026-01-01 14:33:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-137828027284416 | render() called
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-128839500639168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-128839500639168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-128839500639168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-128839500639168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-128839500639168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-128839500639168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-128839500639168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-128839500639168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-128839500639168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-128839500639168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-128839500639168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-128839500639168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-128839500639168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-128839500639168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-128839500639168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-128839500639168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-128839500639168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-128839500639168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-128839500639168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-128839500639168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-128839500639168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-128839500639168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-128839500639168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-128839500639168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-128839500639168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-128839500639168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-128839500639168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-128839500639168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-128839500639168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-128839500639168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-128839500639168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-128839500639168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-128839500639168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-128839500639168 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:34:27 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:206 | Thread-128839500639168 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 189, in export_to_image
    image = QImage(QSize(width, height), QImage.Format_ARGB32)
  File "/usr/lib/python3.13/unittest/mock.py", line 2169, in __init__
    _safe_super(MagicMixin, self).__init__(*args, **kw)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1151, in __init__
    _safe_super(CallableMixin, self).__init__(
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        spec, wraps, name, spec_set, parent,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        _spec_state, _new_name, _new_parent, **kwargs
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 484, in __init__
    self._mock_add_spec(spec, spec_set, _spec_as_instance, _eat_self)
    ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 535, in _mock_add_spec
    raise InvalidSpecError(f'Cannot spec a Mock object. [object={spec!r}]')
unittest.mock.InvalidSpecError: Cannot spec a Mock object. [object=<MagicMock spec='int' id='128839477716240'>]
2026-01-01 14:34:27 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-128839500639168 | render() called
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-135328485305280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-135328485305280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-135328485305280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-135328485305280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-135328485305280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-135328485305280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-135328485305280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-135328485305280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-135328485305280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-135328485305280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-135328485305280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-135328485305280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-135328485305280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-135328485305280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-135328485305280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-135328485305280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-135328485305280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-135328485305280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-135328485305280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-135328485305280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-135328485305280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-135328485305280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-135328485305280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-135328485305280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-135328485305280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-135328485305280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-135328485305280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-135328485305280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-135328485305280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-135328485305280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-135328485305280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-135328485305280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-135328485305280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-135328485305280 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:35:03 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:206 | Thread-135328485305280 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 189, in export_to_image
    image = QImage(QSize(width, height), QImage.Format_ARGB32)
  File "/usr/lib/python3.13/unittest/mock.py", line 2169, in __init__
    _safe_super(MagicMixin, self).__init__(*args, **kw)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1151, in __init__
    _safe_super(CallableMixin, self).__init__(
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        spec, wraps, name, spec_set, parent,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        _spec_state, _new_name, _new_parent, **kwargs
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 484, in __init__
    self._mock_add_spec(spec, spec_set, _spec_as_instance, _eat_self)
    ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 535, in _mock_add_spec
    raise InvalidSpecError(f'Cannot spec a Mock object. [object={spec!r}]')
unittest.mock.InvalidSpecError: Cannot spec a Mock object. [object=<MagicMock spec='int' id='135328462382352'>]
2026-01-01 14:35:03 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-135328485305280 | render() called
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-130935280872384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-130935280872384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-130935280872384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-130935280872384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-130935280872384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-130935280872384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-130935280872384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-130935280872384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-130935280872384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-130935280872384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-130935280872384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-130935280872384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-130935280872384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-130935280872384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-130935280872384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-130935280872384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-130935280872384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-130935280872384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-130935280872384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-130935280872384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-130935280872384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-130935280872384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-130935280872384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-130935280872384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-130935280872384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-130935280872384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-130935280872384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-130935280872384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-130935280872384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-130935280872384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-130935280872384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-130935280872384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-130935280872384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-130935280872384 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:35:40 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:206 | Thread-130935280872384 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 189, in export_to_image
    image = QImage(QSize(width, height), QImage.Format_ARGB32)
  File "/usr/lib/python3.13/unittest/mock.py", line 2169, in __init__
    _safe_super(MagicMixin, self).__init__(*args, **kw)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1151, in __init__
    _safe_super(CallableMixin, self).__init__(
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        spec, wraps, name, spec_set, parent,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        _spec_state, _new_name, _new_parent, **kwargs
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 484, in __init__
    self._mock_add_spec(spec, spec_set, _spec_as_instance, _eat_self)
    ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 535, in _mock_add_spec
    raise InvalidSpecError(f'Cannot spec a Mock object. [object={spec!r}]')
unittest.mock.InvalidSpecError: Cannot spec a Mock object. [object=<MagicMock spec='int' id='130935257916688'>]
2026-01-01 14:35:40 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-130935280872384 | render() called
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-133913140517824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-133913140517824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-133913140517824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-133913140517824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-133913140517824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-133913140517824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-133913140517824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-133913140517824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-133913140517824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-133913140517824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-133913140517824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-133913140517824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-133913140517824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-133913140517824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-133913140517824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-133913140517824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-133913140517824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-133913140517824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-133913140517824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-133913140517824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-133913140517824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-133913140517824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-133913140517824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-133913140517824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-133913140517824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-133913140517824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-133913140517824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-133913140517824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-133913140517824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-133913140517824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-133913140517824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-133913140517824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-133913140517824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-133913140517824 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:37:13 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:206 | Thread-133913140517824 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 189, in export_to_image
    image = QImage(QSize(width, height), QImage.Format_ARGB32)
  File "/usr/lib/python3.13/unittest/mock.py", line 2169, in __init__
    _safe_super(MagicMixin, self).__init__(*args, **kw)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1151, in __init__
    _safe_super(CallableMixin, self).__init__(
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        spec, wraps, name, spec_set, parent,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        _spec_state, _new_name, _new_parent, **kwargs
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 484, in __init__
    self._mock_add_spec(spec, spec_set, _spec_as_instance, _eat_self)
    ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 535, in _mock_add_spec
    raise InvalidSpecError(f'Cannot spec a Mock object. [object={spec!r}]')
unittest.mock.InvalidSpecError: Cannot spec a Mock object. [object=<MagicMock spec='int' id='133913117554880'>]
2026-01-01 14:37:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-133913140517824 | render() called
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-131494311320512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-131494311320512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-131494311320512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-131494311320512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-131494311320512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-131494311320512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-131494311320512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-131494311320512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-131494311320512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-131494311320512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-131494311320512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-131494311320512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-131494311320512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-131494311320512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-131494311320512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-131494311320512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-131494311320512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-131494311320512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-131494311320512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-131494311320512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-131494311320512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-131494311320512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-131494311320512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-131494311320512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-131494311320512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-131494311320512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-131494311320512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-131494311320512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-131494311320512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-131494311320512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-131494311320512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-131494311320512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-131494311320512 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-131494311320512 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:37:53 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-131494311320512 | Adding 1 drillhole trace features to layer
2026-01-01 14:37:53 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:206 | Thread-131494311320512 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 189, in export_to_image
    image = QImage(QSize(width, height), QImage.Format_ARGB32)
  File "/usr/lib/python3.13/unittest/mock.py", line 2169, in __init__
    _safe_super(MagicMixin, self).__init__(*args, **kw)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1151, in __init__
    _safe_super(CallableMixin, self).__init__(
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        spec, wraps, name, spec_set, parent,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        _spec_state, _new_name, _new_parent, **kwargs
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 484, in __init__
    self._mock_add_spec(spec, spec_set, _spec_as_instance, _eat_self)
    ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 535, in _mock_add_spec
    raise InvalidSpecError(f'Cannot spec a Mock object. [object={spec!r}]')
unittest.mock.InvalidSpecError: Cannot spec a Mock object. [object=<MagicMock spec='int' id='131494288358912'>]
2026-01-01 14:37:53 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-131494311320512 | render() called
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-130340768705472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-130340768705472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-130340768705472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-130340768705472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-130340768705472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-130340768705472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-130340768705472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-130340768705472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-130340768705472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-130340768705472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-130340768705472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-130340768705472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-130340768705472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-130340768705472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-130340768705472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-130340768705472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-130340768705472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-130340768705472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-130340768705472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-130340768705472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-130340768705472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-130340768705472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-130340768705472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-130340768705472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-130340768705472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-130340768705472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-130340768705472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-130340768705472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-130340768705472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-130340768705472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-130340768705472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-130340768705472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-130340768705472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-130340768705472 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:38:30 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-130340768705472 | Adding 1 drillhole trace features to layer
2026-01-01 14:38:30 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:206 | Thread-130340768705472 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 189, in export_to_image
    image = QImage(QSize(width, height), QImage.Format_ARGB32)
  File "/usr/lib/python3.13/unittest/mock.py", line 2169, in __init__
    _safe_super(MagicMixin, self).__init__(*args, **kw)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1151, in __init__
    _safe_super(CallableMixin, self).__init__(
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        spec, wraps, name, spec_set, parent,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        _spec_state, _new_name, _new_parent, **kwargs
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 484, in __init__
    self._mock_add_spec(spec, spec_set, _spec_as_instance, _eat_self)
    ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 535, in _mock_add_spec
    raise InvalidSpecError(f'Cannot spec a Mock object. [object={spec!r}]')
unittest.mock.InvalidSpecError: Cannot spec a Mock object. [object=<MagicMock spec='int' id='130340743978624'>]
2026-01-01 14:38:30 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-130340768705472 | render() called
2026-01-01 14:39:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-134515306257344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-134515306257344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:07 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-134515306257344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:07 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-134515306257344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:07 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-134515306257344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:07 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-134515306257344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:07 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-134515306257344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:07 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-134515306257344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:07 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-134515306257344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:07 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-134515306257344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:08 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-134515306257344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:08 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-134515306257344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:08 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-134515306257344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-134515306257344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:08 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-134515306257344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:08 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-134515306257344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:08 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-134515306257344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:08 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-134515306257344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:08 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-134515306257344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:08 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-134515306257344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-134515306257344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:08 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-134515306257344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:08 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-134515306257344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-134515306257344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-134515306257344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:08 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-134515306257344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-134515306257344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:08 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-134515306257344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:08 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-134515306257344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-134515306257344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:08 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-134515306257344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:08 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-134515306257344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:08 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-134515306257344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:08 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-134515306257344 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:39:08 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-134515306257344 | Adding 1 drillhole trace features to layer
2026-01-01 14:39:08 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:206 | Thread-134515306257344 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 189, in export_to_image
    image = QImage(QSize(width, height), QImage.Format_ARGB32)
  File "/usr/lib/python3.13/unittest/mock.py", line 2169, in __init__
    _safe_super(MagicMixin, self).__init__(*args, **kw)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1151, in __init__
    _safe_super(CallableMixin, self).__init__(
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        spec, wraps, name, spec_set, parent,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        _spec_state, _new_name, _new_parent, **kwargs
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 484, in __init__
    self._mock_add_spec(spec, spec_set, _spec_as_instance, _eat_self)
    ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 535, in _mock_add_spec
    raise InvalidSpecError(f'Cannot spec a Mock object. [object={spec!r}]')
unittest.mock.InvalidSpecError: Cannot spec a Mock object. [object=<MagicMock spec='int' id='134515281489136'>]
2026-01-01 14:39:08 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-134515306257344 | render() called
2026-01-01 14:39:44 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-128450022517696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:44 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-128450022517696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:44 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-128450022517696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:44 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-128450022517696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:44 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-128450022517696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:44 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-128450022517696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:44 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-128450022517696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:44 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-128450022517696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:44 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-128450022517696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:44 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-128450022517696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:44 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-128450022517696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:44 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-128450022517696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:44 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-128450022517696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:44 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-128450022517696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:44 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-128450022517696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:44 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-128450022517696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:44 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-128450022517696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:44 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-128450022517696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:44 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-128450022517696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:44 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-128450022517696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:44 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-128450022517696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:44 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-128450022517696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:44 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-128450022517696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-128450022517696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-128450022517696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:45 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-128450022517696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-128450022517696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:45 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-128450022517696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:45 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-128450022517696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:45 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-128450022517696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:45 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-128450022517696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:45 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-128450022517696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:45 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-128450022517696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:39:45 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-128450022517696 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:39:45 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-128450022517696 | Adding 1 drillhole trace features to layer
2026-01-01 14:39:45 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:206 | Thread-128450022517696 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 189, in export_to_image
    image = QImage(QSize(width, height), QImage.Format_ARGB32)
  File "/usr/lib/python3.13/unittest/mock.py", line 2169, in __init__
    _safe_super(MagicMixin, self).__init__(*args, **kw)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1151, in __init__
    _safe_super(CallableMixin, self).__init__(
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        spec, wraps, name, spec_set, parent,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        _spec_state, _new_name, _new_parent, **kwargs
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 484, in __init__
    self._mock_add_spec(spec, spec_set, _spec_as_instance, _eat_self)
    ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 535, in _mock_add_spec
    raise InvalidSpecError(f'Cannot spec a Mock object. [object={spec!r}]')
unittest.mock.InvalidSpecError: Cannot spec a Mock object. [object=<MagicMock spec='int' id='128449997810928'>]
2026-01-01 14:39:45 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-128450022517696 | render() called
2026-01-01 14:40:45 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-126496257555392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:40:45 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-126496257555392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:40:45 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-126496257555392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:40:45 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-126496257555392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:40:45 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-126496257555392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:40:45 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-126496257555392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:40:45 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-126496257555392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:40:45 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-126496257555392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:40:45 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-126496257555392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:40:45 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-126496257555392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:40:45 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-126496257555392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:40:45 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-126496257555392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:40:45 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-126496257555392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-126496257555392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:40:45 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-126496257555392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:40:45 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-126496257555392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:40:45 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-126496257555392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:40:45 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-126496257555392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:40:45 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-126496257555392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:40:45 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-126496257555392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-126496257555392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:40:45 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-126496257555392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:40:45 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-126496257555392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-126496257555392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-126496257555392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:40:45 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-126496257555392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:40:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-126496257555392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:40:45 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-126496257555392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:40:45 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-126496257555392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:40:45 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-126496257555392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:40:45 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-126496257555392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:40:45 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-126496257555392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:40:45 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-126496257555392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:40:46 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-126496257555392 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:40:46 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-126496257555392 | Adding 1 drillhole trace features to layer
2026-01-01 14:40:46 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-126496257555392 | render() called
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-129546312330176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-129546312330176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-129546312330176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-129546312330176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-129546312330176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-129546312330176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-129546312330176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-129546312330176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-129546312330176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-129546312330176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-129546312330176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-129546312330176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-129546312330176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-129546312330176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-129546312330176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-129546312330176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-129546312330176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-129546312330176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-129546312330176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-129546312330176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-129546312330176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-129546312330176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-129546312330176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-129546312330176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-129546312330176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-129546312330176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-129546312330176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-129546312330176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-129546312330176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-129546312330176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-129546312330176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-129546312330176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-129546312330176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-129546312330176 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:41:15 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-129546312330176 | Adding 1 drillhole trace features to layer
2026-01-01 14:41:15 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:206 | Thread-129546312330176 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 189, in export_to_image
    image = QImage(QSize(width, height), QImage.Format_ARGB32)
  File "/usr/lib/python3.13/unittest/mock.py", line 2169, in __init__
    _safe_super(MagicMixin, self).__init__(*args, **kw)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1151, in __init__
    _safe_super(CallableMixin, self).__init__(
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        spec, wraps, name, spec_set, parent,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        _spec_state, _new_name, _new_parent, **kwargs
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 484, in __init__
    self._mock_add_spec(spec, spec_set, _spec_as_instance, _eat_self)
    ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 535, in _mock_add_spec
    raise InvalidSpecError(f'Cannot spec a Mock object. [object={spec!r}]')
unittest.mock.InvalidSpecError: Cannot spec a Mock object. [object=<MagicMock spec='int' id='129546287637440'>]
2026-01-01 14:41:15 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-129546312330176 | render() called
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-125360484027328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-125360484027328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-125360484027328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-125360484027328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-125360484027328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-125360484027328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-125360484027328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-125360484027328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-125360484027328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-125360484027328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-125360484027328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-125360484027328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-125360484027328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-125360484027328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-125360484027328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-125360484027328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-125360484027328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-125360484027328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-125360484027328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-125360484027328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-125360484027328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-125360484027328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-125360484027328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-125360484027328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-125360484027328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-125360484027328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-125360484027328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-125360484027328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-125360484027328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-125360484027328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-125360484027328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-125360484027328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-125360484027328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-125360484027328 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:41:42 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-125360484027328 | Adding 1 drillhole trace features to layer
2026-01-01 14:41:42 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:206 | Thread-125360484027328 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 193, in export_to_image
    painter.setRenderHint(QPainter.Antialiasing)
    ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 710, in __getattr__
    result = self._get_child_mock(
        parent=self, name=name, wraps=wraps, _new_name=name,
        _new_parent=self
    )
  File "/usr/lib/python3.13/unittest/mock.py", line 1090, in _get_child_mock
    return klass(**kw)
TypeError: MockQPainter.__init__() got an unexpected keyword argument 'parent'
2026-01-01 14:41:42 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-125360484027328 | render() called
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-127345172904896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-127345172904896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-127345172904896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-127345172904896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-127345172904896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-127345172904896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-127345172904896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-127345172904896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-127345172904896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-127345172904896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-127345172904896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-127345172904896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-127345172904896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-127345172904896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-127345172904896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-127345172904896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-127345172904896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-127345172904896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-127345172904896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-127345172904896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-127345172904896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-127345172904896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-127345172904896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-127345172904896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-127345172904896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-127345172904896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-127345172904896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-127345172904896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-127345172904896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-127345172904896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-127345172904896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-127345172904896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-127345172904896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-127345172904896 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:42:13 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-127345172904896 | Adding 1 drillhole trace features to layer
2026-01-01 14:42:13 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:206 | Thread-127345172904896 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 192, in export_to_image
    painter = QPainter(image)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/base_test.py", line 876, in __init__
    def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs)
                                         ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 2169, in __init__
    _safe_super(MagicMixin, self).__init__(*args, **kw)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1151, in __init__
    _safe_super(CallableMixin, self).__init__(
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        spec, wraps, name, spec_set, parent,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        _spec_state, _new_name, _new_parent, **kwargs
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 484, in __init__
    self._mock_add_spec(spec, spec_set, _spec_as_instance, _eat_self)
    ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 535, in _mock_add_spec
    raise InvalidSpecError(f'Cannot spec a Mock object. [object={spec!r}]')
unittest.mock.InvalidSpecError: Cannot spec a Mock object. [object=<MockQImage id='127345148241168'>]
2026-01-01 14:42:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-127345172904896 | render() called
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-126304997854144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-126304997854144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-126304997854144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-126304997854144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-126304997854144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-126304997854144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-126304997854144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-126304997854144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-126304997854144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-126304997854144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-126304997854144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-126304997854144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-126304997854144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-126304997854144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-126304997854144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-126304997854144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-126304997854144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-126304997854144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-126304997854144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-126304997854144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-126304997854144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-126304997854144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-126304997854144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-126304997854144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-126304997854144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-126304997854144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-126304997854144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-126304997854144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-126304997854144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-126304997854144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-126304997854144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-126304997854144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-126304997854144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-126304997854144 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:42:40 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-126304997854144 | Adding 1 drillhole trace features to layer
2026-01-01 14:42:40 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-126304997854144 | render() called
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-130966045359040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-130966045359040 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:42:54 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-130966045359040 | Adding 1 drillhole trace features to layer
2026-01-01 14:42:54 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-130966045359040 | render() called
2026-01-01 14:45:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:04 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:04 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:04 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:04 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:04 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:04 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:04 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:04 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:04 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:04 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:04 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:04 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:04 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:04 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:04 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:04 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:04 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:04 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:04 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:04 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:04 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:04 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:04 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:04 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:04 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-133575390931904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-133575390931904 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:45:05 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-133575390931904 | Adding 1 drillhole trace features to layer
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-133575390931904 | render() called
2026-01-01 14:45:05 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:141 | Thread-133575390931904 | No valid layers to render
2026-01-01 14:45:05 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-133575390931904 | render() called
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-136793690246080 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-136793690246080 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:45:42 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-136793690246080 | Adding 1 drillhole trace features to layer
2026-01-01 14:45:42 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:103 | Thread-136793690246080 | Failed to create memory layer: Fail
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-136793690246080 | create_drillhole_trace_layer called with 0 holes
2026-01-01 14:45:42 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:264 | Thread-136793690246080 | No drillhole data provided for trace layer
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-136793690246080 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:276 | Thread-136793690246080 | Skipping hole H1: insufficient trace points (1)
2026-01-01 14:45:42 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-136793690246080 | Adding 0 drillhole trace features to layer
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-136793690246080 | render() called
2026-01-01 14:45:42 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:141 | Thread-136793690246080 | No valid layers to render
2026-01-01 14:45:42 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:206 | Thread-136793690246080 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 183, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-01 14:45:42 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-136793690246080 | render() called
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:41 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:41 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:41 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-124261816323008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:46:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-124261816323008 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:46:41 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-124261816323008 | Adding 1 drillhole trace features to layer
2026-01-01 14:46:41 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:103 | Thread-124261816323008 | Failed to create memory layer: Fail
2026-01-01 14:46:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-124261816323008 | create_drillhole_trace_layer called with 0 holes
2026-01-01 14:46:41 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:264 | Thread-124261816323008 | No drillhole data provided for trace layer
2026-01-01 14:46:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-124261816323008 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:46:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:276 | Thread-124261816323008 | Skipping hole H1: insufficient trace points (1)
2026-01-01 14:46:41 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-124261816323008 | Adding 0 drillhole trace features to layer
2026-01-01 14:46:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-124261816323008 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:46:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-124261816323008 | render() called
2026-01-01 14:46:41 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:141 | Thread-124261816323008 | No valid layers to render
2026-01-01 14:46:41 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:206 | Thread-124261816323008 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 183, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-01 14:46:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-124261816323008 | render() called
2026-01-01 14:46:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-124261816323008 | render() called
2026-01-01 14:46:41 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:141 | Thread-124261816323008 | No valid layers to render
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-130223653837760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-130223653837760 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:47:13 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-130223653837760 | Adding 1 drillhole trace features to layer
2026-01-01 14:47:13 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:103 | Thread-130223653837760 | Failed to create memory layer: Fail
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-130223653837760 | create_drillhole_trace_layer called with 0 holes
2026-01-01 14:47:13 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:264 | Thread-130223653837760 | No drillhole data provided for trace layer
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-130223653837760 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:276 | Thread-130223653837760 | Skipping hole H1: insufficient trace points (1)
2026-01-01 14:47:13 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-130223653837760 | Adding 0 drillhole trace features to layer
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-130223653837760 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-130223653837760 | render() called
2026-01-01 14:47:13 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:141 | Thread-130223653837760 | No valid layers to render
2026-01-01 14:47:13 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:206 | Thread-130223653837760 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 183, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-130223653837760 | render() called
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-130223653837760 | render() called
2026-01-01 14:47:13 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:141 | Thread-130223653837760 | No valid layers to render
2026-01-01 14:47:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-130223653837760 | render() called
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-136728410151872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-136728410151872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-136728410151872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-136728410151872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-136728410151872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-136728410151872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-136728410151872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-136728410151872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-136728410151872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-136728410151872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-136728410151872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-136728410151872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-136728410151872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-136728410151872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-136728410151872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-136728410151872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-136728410151872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-136728410151872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-136728410151872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-136728410151872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-136728410151872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-136728410151872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-136728410151872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-136728410151872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-136728410151872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-136728410151872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-136728410151872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-136728410151872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-136728410151872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-136728410151872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-136728410151872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-136728410151872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-136728410151872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:47:49 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-136728410151872 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:47:49 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-136728410151872 | Adding 1 drillhole trace features to layer
2026-01-01 14:47:50 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:103 | Thread-136728410151872 | Failed to create memory layer: Fail
2026-01-01 14:47:50 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-136728410151872 | create_drillhole_trace_layer called with 0 holes
2026-01-01 14:47:50 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:264 | Thread-136728410151872 | No drillhole data provided for trace layer
2026-01-01 14:47:50 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-136728410151872 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:47:50 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:276 | Thread-136728410151872 | Skipping hole H1: insufficient trace points (1)
2026-01-01 14:47:50 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-136728410151872 | Adding 0 drillhole trace features to layer
2026-01-01 14:47:50 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-136728410151872 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:47:50 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-136728410151872 | render() called
2026-01-01 14:47:50 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:141 | Thread-136728410151872 | No valid layers to render
2026-01-01 14:47:50 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:206 | Thread-136728410151872 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 183, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-01 14:47:50 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-136728410151872 | render() called
2026-01-01 14:47:50 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-136728410151872 | render() called
2026-01-01 14:47:50 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:141 | Thread-136728410151872 | No valid layers to render
2026-01-01 14:47:50 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-136728410151872 | render() called
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-132154525629376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-132154525629376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-132154525629376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-132154525629376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-132154525629376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-132154525629376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-132154525629376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-132154525629376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-132154525629376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-132154525629376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-132154525629376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-132154525629376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-132154525629376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-132154525629376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-132154525629376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-132154525629376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-132154525629376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-132154525629376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-132154525629376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-132154525629376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-132154525629376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-132154525629376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-132154525629376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-132154525629376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-132154525629376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-132154525629376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-132154525629376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-132154525629376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-132154525629376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-132154525629376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-132154525629376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-132154525629376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-132154525629376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-132154525629376 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:48:55 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-132154525629376 | Adding 1 drillhole trace features to layer
2026-01-01 14:48:55 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:103 | Thread-132154525629376 | Failed to create memory layer: Fail
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-132154525629376 | create_drillhole_trace_layer called with 0 holes
2026-01-01 14:48:55 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:264 | Thread-132154525629376 | No drillhole data provided for trace layer
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-132154525629376 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:276 | Thread-132154525629376 | Skipping hole H1: insufficient trace points (1)
2026-01-01 14:48:55 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-132154525629376 | Adding 0 drillhole trace features to layer
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-132154525629376 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-132154525629376 | render() called
2026-01-01 14:48:55 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:141 | Thread-132154525629376 | No valid layers to render
2026-01-01 14:48:55 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:206 | Thread-132154525629376 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 183, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-132154525629376 | render() called
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-132154525629376 | render() called
2026-01-01 14:48:55 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:141 | Thread-132154525629376 | No valid layers to render
2026-01-01 14:48:55 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-132154525629376 | render() called
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-128760965471168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-128760965471168 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:52:19 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-128760965471168 | Adding 1 drillhole trace features to layer
2026-01-01 14:52:19 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:103 | Thread-128760965471168 | Failed to create memory layer: Fail
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-128760965471168 | create_drillhole_trace_layer called with 0 holes
2026-01-01 14:52:19 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:264 | Thread-128760965471168 | No drillhole data provided for trace layer
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-128760965471168 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:276 | Thread-128760965471168 | Skipping hole H1: insufficient trace points (1)
2026-01-01 14:52:19 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-128760965471168 | Adding 0 drillhole trace features to layer
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-128760965471168 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-128760965471168 | render() called
2026-01-01 14:52:19 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:141 | Thread-128760965471168 | No valid layers to render
2026-01-01 14:52:19 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:206 | Thread-128760965471168 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 183, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-128760965471168 | render() called
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-128760965471168 | render() called
2026-01-01 14:52:19 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:141 | Thread-128760965471168 | No valid layers to render
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-128760965471168 | render() called
2026-01-01 14:52:19 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-128760965471168 | render() called
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-128367559764928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-128367559764928 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:52:27 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-128367559764928 | Adding 1 drillhole trace features to layer
2026-01-01 14:52:27 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:103 | Thread-128367559764928 | Failed to create memory layer: Fail
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-128367559764928 | create_drillhole_trace_layer called with 0 holes
2026-01-01 14:52:27 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:264 | Thread-128367559764928 | No drillhole data provided for trace layer
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-128367559764928 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:276 | Thread-128367559764928 | Skipping hole H1: insufficient trace points (1)
2026-01-01 14:52:27 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-128367559764928 | Adding 0 drillhole trace features to layer
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-128367559764928 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-128367559764928 | render() called
2026-01-01 14:52:27 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:141 | Thread-128367559764928 | No valid layers to render
2026-01-01 14:52:27 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:206 | Thread-128367559764928 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 183, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-128367559764928 | render() called
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-128367559764928 | render() called
2026-01-01 14:52:27 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:141 | Thread-128367559764928 | No valid layers to render
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-128367559764928 | render() called
2026-01-01 14:52:27 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-128367559764928 | render() called
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:12 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:13 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:13 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:13 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:13 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:13 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:13 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:13 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:13 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-137267388062656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:53:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-137267388062656 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:53:13 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-137267388062656 | Adding 1 drillhole trace features to layer
2026-01-01 14:53:13 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:103 | Thread-137267388062656 | Failed to create memory layer: Fail
2026-01-01 14:53:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-137267388062656 | create_drillhole_trace_layer called with 0 holes
2026-01-01 14:53:13 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:264 | Thread-137267388062656 | No drillhole data provided for trace layer
2026-01-01 14:53:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-137267388062656 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:53:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:276 | Thread-137267388062656 | Skipping hole H1: insufficient trace points (1)
2026-01-01 14:53:13 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-137267388062656 | Adding 0 drillhole trace features to layer
2026-01-01 14:53:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-137267388062656 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:53:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-137267388062656 | render() called
2026-01-01 14:53:13 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:141 | Thread-137267388062656 | No valid layers to render
2026-01-01 14:53:13 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:206 | Thread-137267388062656 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 183, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-01 14:53:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-137267388062656 | render() called
2026-01-01 14:53:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-137267388062656 | render() called
2026-01-01 14:53:13 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:141 | Thread-137267388062656 | No valid layers to render
2026-01-01 14:53:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-137267388062656 | render() called
2026-01-01 14:53:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-137267388062656 | render() called
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-139568846056384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-139568846056384 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:54:41 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-139568846056384 | Adding 1 drillhole trace features to layer
2026-01-01 14:54:41 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:103 | Thread-139568846056384 | Failed to create memory layer: Fail
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-139568846056384 | create_drillhole_trace_layer called with 0 holes
2026-01-01 14:54:41 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:264 | Thread-139568846056384 | No drillhole data provided for trace layer
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-139568846056384 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:276 | Thread-139568846056384 | Skipping hole H1: insufficient trace points (1)
2026-01-01 14:54:41 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-139568846056384 | Adding 0 drillhole trace features to layer
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-139568846056384 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-139568846056384 | render() called
2026-01-01 14:54:41 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:141 | Thread-139568846056384 | No valid layers to render
2026-01-01 14:54:41 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:206 | Thread-139568846056384 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 183, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-139568846056384 | render() called
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-139568846056384 | render() called
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-139568846056384 | render() called
2026-01-01 14:54:41 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:141 | Thread-139568846056384 | No valid layers to render
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-139568846056384 | render() called
2026-01-01 14:54:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-139568846056384 | render() called
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-131670980357056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-131670980357056 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:55:36 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-131670980357056 | Adding 1 drillhole trace features to layer
2026-01-01 14:55:36 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:103 | Thread-131670980357056 | Failed to create memory layer: Fail
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-131670980357056 | create_drillhole_trace_layer called with 0 holes
2026-01-01 14:55:36 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:264 | Thread-131670980357056 | No drillhole data provided for trace layer
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-131670980357056 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:276 | Thread-131670980357056 | Skipping hole H1: insufficient trace points (1)
2026-01-01 14:55:36 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-131670980357056 | Adding 0 drillhole trace features to layer
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-131670980357056 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-131670980357056 | render() called
2026-01-01 14:55:36 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:141 | Thread-131670980357056 | No valid layers to render
2026-01-01 14:55:36 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:206 | Thread-131670980357056 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 183, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-131670980357056 | render() called
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-131670980357056 | render() called
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-131670980357056 | render() called
2026-01-01 14:55:36 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:141 | Thread-131670980357056 | No valid layers to render
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-131670980357056 | render() called
2026-01-01 14:55:36 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-131670980357056 | render() called
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-125777007987648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-125777007987648 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:56:43 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-125777007987648 | Adding 1 drillhole trace features to layer
2026-01-01 14:56:43 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:103 | Thread-125777007987648 | Failed to create memory layer: Fail
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-125777007987648 | create_drillhole_trace_layer called with 0 holes
2026-01-01 14:56:43 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:264 | Thread-125777007987648 | No drillhole data provided for trace layer
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-125777007987648 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:276 | Thread-125777007987648 | Skipping hole H1: insufficient trace points (1)
2026-01-01 14:56:43 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-125777007987648 | Adding 0 drillhole trace features to layer
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-125777007987648 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-125777007987648 | render() called
2026-01-01 14:56:43 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:141 | Thread-125777007987648 | No valid layers to render
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-125777007987648 | render() called
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-125777007987648 | render() called
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-125777007987648 | render() called
2026-01-01 14:56:43 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:141 | Thread-125777007987648 | No valid layers to render
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-125777007987648 | render() called
2026-01-01 14:56:43 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-125777007987648 | render() called
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-126289791650752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-126289791650752 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:57:21 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-126289791650752 | Adding 1 drillhole trace features to layer
2026-01-01 14:57:21 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:103 | Thread-126289791650752 | Failed to create memory layer: Fail
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-126289791650752 | create_drillhole_trace_layer called with 0 holes
2026-01-01 14:57:21 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:264 | Thread-126289791650752 | No drillhole data provided for trace layer
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-126289791650752 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:276 | Thread-126289791650752 | Skipping hole H1: insufficient trace points (1)
2026-01-01 14:57:21 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-126289791650752 | Adding 0 drillhole trace features to layer
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-126289791650752 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-126289791650752 | render() called
2026-01-01 14:57:21 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:141 | Thread-126289791650752 | No valid layers to render
2026-01-01 14:57:21 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:206 | Thread-126289791650752 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 183, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-126289791650752 | render() called
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-126289791650752 | render() called
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-126289791650752 | render() called
2026-01-01 14:57:21 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:141 | Thread-126289791650752 | No valid layers to render
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-126289791650752 | render() called
2026-01-01 14:57:21 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-126289791650752 | render() called
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-137878629473216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-137878629473216 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:58:16 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-137878629473216 | Adding 1 drillhole trace features to layer
2026-01-01 14:58:16 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:103 | Thread-137878629473216 | Failed to create memory layer: Fail
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-137878629473216 | create_drillhole_trace_layer called with 0 holes
2026-01-01 14:58:16 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:264 | Thread-137878629473216 | No drillhole data provided for trace layer
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-137878629473216 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:276 | Thread-137878629473216 | Skipping hole H1: insufficient trace points (1)
2026-01-01 14:58:16 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-137878629473216 | Adding 0 drillhole trace features to layer
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-137878629473216 | create_drillhole_trace_layer called with 1 holes
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-137878629473216 | render() called
2026-01-01 14:58:16 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:141 | Thread-137878629473216 | No valid layers to render
2026-01-01 14:58:16 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:206 | Thread-137878629473216 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 183, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-137878629473216 | render() called
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-137878629473216 | render() called
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-137878629473216 | render() called
2026-01-01 14:58:16 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:141 | Thread-137878629473216 | No valid layers to render
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-137878629473216 | render() called
2026-01-01 14:58:16 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-137878629473216 | render() called
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-123152888486848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:02:28 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:63 | Thread-123152888486848 | Thread processing canceled.
2026-01-01 15:02:28 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:79 | Thread-123152888486848 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 68, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 78, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-01 15:02:28 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:168 | Thread-123152888486848 | Canceling 2 active threads...
2026-01-01 15:04:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:46 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:46 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:46 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:46 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:46 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:46 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:46 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:46 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:46 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:46 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:46 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:46 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:46 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:46 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:46 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:46 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:46 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:46 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:46 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:46 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:46 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:46 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:46 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:46 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:46 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-134750818118592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:04:47 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:63 | Thread-134750818118592 | Thread processing canceled.
2026-01-01 15:04:47 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:79 | Thread-134750818118592 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 68, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 71, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-01 15:04:47 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:168 | Thread-134750818118592 | Canceling 2 active threads...
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:35 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:36 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:36 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:36 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:36 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:36 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:36 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:36 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:36 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:36 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:36 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:36 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:36 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:36 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:36 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:36 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:36 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:36 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:36 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:36 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:36 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-126102162254784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:05:36 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:168 | Thread-126102162254784 | Canceling 2 active threads...
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-130417407835072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:07:24 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:63 | Thread-130417407835072 | Thread processing canceled.
2026-01-01 15:07:24 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:79 | Thread-130417407835072 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 68, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-01 15:07:24 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:168 | Thread-130417407835072 | Canceling 2 active threads...
2026-01-01 15:11:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:28 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:28 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:28 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:28 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:28 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:28 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:28 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:28 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:28 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:28 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:28 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:28 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:28 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:28 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:28 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:28 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:28 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:28 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:28 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:28 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:28 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:28 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:28 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:28 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:28 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-137714473544640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:11:29 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:63 | Thread-137714473544640 | Thread processing canceled.
2026-01-01 15:11:29 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:79 | Thread-137714473544640 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 68, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-01 15:11:29 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:168 | Thread-137714473544640 | Canceling 2 active threads...
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:17 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:18 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:18 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:18 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:18 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:18 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-134349636041664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:29:18 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:63 | Thread-134349636041664 | Thread processing canceled.
2026-01-01 15:29:18 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:79 | Thread-134349636041664 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 68, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-01 15:29:18 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:168 | Thread-134349636041664 | Canceling 2 active threads...
2026-01-01 15:29:18 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:199 | Thread-134349636041664 | Parallel processing error: Test error
2026-01-01 15:29:18 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:168 | Thread-134349636041664 | Canceling 2 active threads...
2026-01-01 15:39:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-127322438577088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:39:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-127322438577088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:39:13 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-127322438577088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:39:13 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-127322438577088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:39:13 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-127322438577088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:39:13 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-127322438577088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:39:13 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-127322438577088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:39:13 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-127322438577088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:39:13 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-127322438577088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:39:13 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-127322438577088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:39:13 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-127322438577088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:39:13 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-127322438577088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:39:13 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-127322438577088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:39:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-127322438577088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:39:13 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-127322438577088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:39:13 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-127322438577088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:39:13 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-127322438577088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:39:13 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-127322438577088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:39:13 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-127322438577088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:39:13 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-127322438577088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:39:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-127322438577088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:39:13 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-127322438577088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:39:13 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-127322438577088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:39:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-127322438577088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:39:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-127322438577088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:39:13 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-127322438577088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:39:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-127322438577088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:39:13 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-127322438577088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:39:13 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-127322438577088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:39:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-127322438577088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:39:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-127322438577088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:39:13 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-127322438577088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:39:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-127322438577088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:40:08 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-137342898084800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:12 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:12 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:12 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:12 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:12 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:41:12 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-129732942613440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:42:11 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-137383721515968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-127806670834624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-127806670834624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-127806670834624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-127806670834624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-127806670834624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-127806670834624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-127806670834624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-127806670834624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-127806670834624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-127806670834624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-127806670834624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-127806670834624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-127806670834624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-127806670834624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-127806670834624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-127806670834624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-127806670834624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-127806670834624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-127806670834624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-127806670834624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-127806670834624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-127806670834624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-127806670834624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-127806670834624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-127806670834624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-127806670834624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-127806670834624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-127806670834624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-127806670834624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-127806670834624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-127806670834624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-127806670834624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-127806670834624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:50:34 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:29 | Thread-127806670834624 | Test Title: Test Message
2026-01-01 15:50:34 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:33 | Thread-127806670834624 | Test Title: Test Message
2026-01-01 15:50:34 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:31 | Thread-127806670834624 | Test Title: Test Message
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-127806670834624 | CRITICAL_OP: finalize_polygon | points=2
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:275 | Thread-127806670834624 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-01 15:50:34 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:279 | Thread-127806670834624 | finalize_polygon() aborted - less than 3 points
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-127806670834624 | CRITICAL_OP: finalize_polygon | points=3
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:275 | Thread-127806670834624 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-127806670834624 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:159 | Thread-127806670834624 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-127806670834624 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:181 | Thread-127806670834624 | ProfileInterpretationTool.reset() completed
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-127806670834624 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:159 | Thread-127806670834624 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-127806670834624 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:181 | Thread-127806670834624 | ProfileInterpretationTool.reset() completed
2026-01-01 15:50:34 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:111 | Thread-127806670834624 | Failed to create locator for layer layer1: mock error
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:139 | Thread-127806670834624 | ProfileInterpretationTool.activate() called
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:142 | Thread-127806670834624 | ProfileInterpretationTool activated successfully
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:147 | Thread-127806670834624 | ProfileInterpretationTool.deactivate() called
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:159 | Thread-127806670834624 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-127806670834624 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:181 | Thread-127806670834624 | ProfileInterpretationTool.reset() completed
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:150 | Thread-127806670834624 | ProfileInterpretationTool deactivated successfully
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:243 | Thread-127806670834624 | Point 1 added: 0.00, 0.00
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:243 | Thread-127806670834624 | Point 2 added: 100.00, 100.00
2026-01-01 15:50:34 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:243 | Thread-127806670834624 | Point 1 added: 50.00, 50.00
2026-01-01 15:50:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-127806670834624 | reset() called, finalized=False
2026-01-01 15:50:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-127806670834624 | finalize_measurement called with 1 points
2026-01-01 15:50:35 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:259 | Thread-127806670834624 | Cannot finalize measurement with less than 2 points
2026-01-01 15:50:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-127806670834624 | finalize_measurement called with 2 points
2026-01-01 15:50:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-127806670834624 | Setting finalized = True
2026-01-01 15:50:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:271 | Thread-127806670834624 | Measurement finalized: 2 points, 100.00m total distance
2026-01-01 15:50:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:286 | Thread-127806670834624 | Switching to pan tool to stop measurement
2026-01-01 15:50:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:289 | Thread-127806670834624 | Pan tool activated - measurement should be frozen
2026-01-01 15:50:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:197 | Thread-127806670834624 | Ignoring click - measurement is finalized
2026-01-01 15:50:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-127806670834624 | finalize_measurement called with 2 points
2026-01-01 15:50:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-127806670834624 | Setting finalized = True
2026-01-01 15:50:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:271 | Thread-127806670834624 | Measurement finalized: 2 points, 100.00m total distance
2026-01-01 15:50:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:286 | Thread-127806670834624 | Switching to pan tool to stop measurement
2026-01-01 15:50:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:289 | Thread-127806670834624 | Pan tool activated - measurement should be frozen
2026-01-01 15:50:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-127806670834624 | reset() called, finalized=False
2026-01-01 15:50:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-127806670834624 | reset() called, finalized=False
2026-01-01 15:50:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-127806670834624 | reset() called, finalized=True
2026-01-01 15:50:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:158 | Thread-127806670834624 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-01 15:50:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-127806670834624 | reset() called, finalized=False
2026-01-01 15:50:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:256 | Thread-127806670834624 | finalize_measurement called with 2 points
2026-01-01 15:50:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-127806670834624 | Setting finalized = True
2026-01-01 15:50:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:271 | Thread-127806670834624 | Measurement finalized: 2 points, 100.00m total distance
2026-01-01 15:50:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-127806670834624 | Rubber band redrawn with final points only
2026-01-01 15:50:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:286 | Thread-127806670834624 | Switching to pan tool to stop measurement
2026-01-01 15:50:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:289 | Thread-127806670834624 | Pan tool activated - measurement should be frozen
2026-01-01 15:50:35 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:106 | Thread-127806670834624 | Failed to create locator for layer layer1: mock error
2026-01-01 15:50:35 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:106 | Thread-127806670834624 | Failed to create locator for layer l2: fail
2026-01-01 15:50:35 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:141 | Thread-127806670834624 | ProfileMeasureTool activated
2026-01-01 15:50:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:154 | Thread-127806670834624 | reset() called, finalized=False
2026-01-01 15:50:35 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:146 | Thread-127806670834624 | ProfileMeasureTool deactivated
2026-01-01 15:50:35 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:63 | Thread-127806670834624 | Thread processing canceled.
2026-01-01 15:50:35 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:79 | Thread-127806670834624 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 68, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-01 15:50:35 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:168 | Thread-127806670834624 | Canceling 2 active threads...
2026-01-01 15:50:35 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:199 | Thread-127806670834624 | Parallel processing error: Test error
2026-01-01 15:50:35 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:168 | Thread-127806670834624 | Canceling 2 active threads...
2026-01-01 15:50:35 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-127806670834624 | create_drillhole_trace_layer called with 1 holes
2026-01-01 15:50:35 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-127806670834624 | Adding 1 drillhole trace features to layer
2026-01-01 15:50:35 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:103 | Thread-127806670834624 | Failed to create memory layer: Fail
2026-01-01 15:50:35 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-127806670834624 | create_drillhole_trace_layer called with 0 holes
2026-01-01 15:50:35 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:264 | Thread-127806670834624 | No drillhole data provided for trace layer
2026-01-01 15:50:35 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-127806670834624 | create_drillhole_trace_layer called with 1 holes
2026-01-01 15:50:35 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:276 | Thread-127806670834624 | Skipping hole H1: insufficient trace points (1)
2026-01-01 15:50:35 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-127806670834624 | Adding 0 drillhole trace features to layer
2026-01-01 15:50:35 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-127806670834624 | create_drillhole_trace_layer called with 1 holes
2026-01-01 15:50:35 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-127806670834624 | render() called
2026-01-01 15:50:35 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:141 | Thread-127806670834624 | No valid layers to render
2026-01-01 15:50:35 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:206 | Thread-127806670834624 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 183, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-01 15:50:35 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-127806670834624 | render() called
2026-01-01 15:50:35 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-127806670834624 | render() called
2026-01-01 15:50:35 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-127806670834624 | render() called
2026-01-01 15:50:35 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:141 | Thread-127806670834624 | No valid layers to render
2026-01-01 15:50:35 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-127806670834624 | render() called
2026-01-01 15:50:35 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-127806670834624 | render() called
2026-01-01 15:51:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-132069007363008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:51:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-132069007363008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:51:14 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-132069007363008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:51:14 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-132069007363008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:51:14 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-132069007363008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:51:14 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-132069007363008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:51:14 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-132069007363008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:51:14 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-132069007363008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:51:14 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-132069007363008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:51:14 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-132069007363008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:51:14 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-132069007363008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:51:14 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-132069007363008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:51:14 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-132069007363008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:51:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-132069007363008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:51:14 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-132069007363008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:51:14 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-132069007363008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:51:14 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-132069007363008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:51:14 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-132069007363008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:51:14 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-132069007363008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:51:14 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-132069007363008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:51:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-132069007363008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:51:14 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-132069007363008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:51:14 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-132069007363008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:51:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-132069007363008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:51:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-132069007363008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:51:14 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-132069007363008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:51:14 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-132069007363008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:51:14 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-132069007363008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:51:14 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-132069007363008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:51:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-132069007363008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:51:14 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-132069007363008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:51:14 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-132069007363008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:51:14 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-132069007363008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 15:51:14 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:63 | Thread-132069007363008 | Thread processing canceled.
2026-01-01 15:51:14 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:79 | Thread-132069007363008 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 68, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-01 15:51:14 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:168 | Thread-132069007363008 | Canceling 2 active threads...
2026-01-01 15:51:14 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:199 | Thread-132069007363008 | Parallel processing error: Test error
2026-01-01 15:51:14 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:168 | Thread-132069007363008 | Canceling 2 active threads...
2026-01-01 16:14:17 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:17 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:17 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:17 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:18 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:18 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:19 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:19 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:19 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:19 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:19 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:19 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:19 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:19 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:19 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:20 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:20 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:20 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:20 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:20 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:20 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:20 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:20 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:20 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:20 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:20 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:20 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:20 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:21 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:14:21 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-138907523857344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-135212163349440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-135212163349440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:08 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-135212163349440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:08 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-135212163349440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:08 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-135212163349440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:08 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-135212163349440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:08 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-135212163349440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:08 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-135212163349440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:08 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-135212163349440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:08 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-135212163349440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:08 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-135212163349440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:08 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-135212163349440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:08 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-135212163349440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:08 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-135212163349440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:08 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-135212163349440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:08 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-135212163349440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:08 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-135212163349440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:08 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-135212163349440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:08 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-135212163349440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-135212163349440 | ✓ Saving profile axes...
2026-01-01 16:24:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-135212163349440 | ✓ Saving topographic profile...
2026-01-01 16:24:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-135212163349440 | ✓ Saving interpretation data...
2026-01-01 16:24:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:214 | Thread-135212163349440 | 3D Export features are restricted for this user.
2026-01-01 16:24:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-135212163349440 | ✓ Saving profile axes...
2026-01-01 16:24:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-135212163349440 | ✓ Saving topographic profile...
2026-01-01 16:24:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-135212163349440 | ✓ Saving interpretation data...
2026-01-01 16:24:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:197 | Thread-135212163349440 | ✓ Saving 3D interpretation data...
2026-01-01 16:24:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-135212163349440 | ✓ Saving profile axes...
2026-01-01 16:24:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-135212163349440 | ✓ Saving topographic profile...
2026-01-01 16:24:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:111 | Thread-135212163349440 | ✓ Saving geological profile...
2026-01-01 16:24:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:131 | Thread-135212163349440 | ✓ Saving structural profile...
2026-01-01 16:24:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:165 | Thread-135212163349440 | ✓ Saving drillhole data...
2026-01-01 16:24:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-135212163349440 | ✓ Saving interpretation data...
2026-01-01 16:24:08 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:31 | Thread-135212163349440 | Access denied for restricted feature: 3D Export
2026-01-01 16:24:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:214 | Thread-135212163349440 | 3D Export features are restricted for this user.
2026-01-01 16:24:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-135212163349440 | ✓ Saving profile axes...
2026-01-01 16:24:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-135212163349440 | ✓ Saving topographic profile...
2026-01-01 16:24:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-135212163349440 | ✓ Saving profile axes...
2026-01-01 16:24:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:165 | Thread-135212163349440 | ✓ Saving drillhole data...
2026-01-01 16:24:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:111 | Thread-135212163349440 | ✓ Saving geological profile...
2026-01-01 16:24:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-135212163349440 | ✓ Saving interpretation data...
2026-01-01 16:24:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:197 | Thread-135212163349440 | ✓ Saving 3D interpretation data...
2026-01-01 16:24:08 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-135212163349440 | Invalid section line layer, skipping 3D export.
2026-01-01 16:24:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-135212163349440 | ✓ Saving interpretation data...
2026-01-01 16:24:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:131 | Thread-135212163349440 | ✓ Saving structural profile...
2026-01-01 16:24:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-135212163349440 | ✓ Saving topographic profile...
2026-01-01 16:24:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-133048458779584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-133048458779584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:46 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-133048458779584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:46 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-133048458779584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:46 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-133048458779584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:46 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-133048458779584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:46 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-133048458779584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:46 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-133048458779584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:46 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-133048458779584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:46 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-133048458779584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:46 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-133048458779584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:46 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-133048458779584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:46 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-133048458779584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:46 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-133048458779584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:46 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-133048458779584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:46 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-133048458779584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:46 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-133048458779584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:46 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-133048458779584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:46 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-133048458779584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:24:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-133048458779584 | ✓ Saving profile axes...
2026-01-01 16:24:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-133048458779584 | ✓ Saving topographic profile...
2026-01-01 16:24:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-133048458779584 | ✓ Saving interpretation data...
2026-01-01 16:24:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:214 | Thread-133048458779584 | 3D Export features are restricted for this user.
2026-01-01 16:24:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-133048458779584 | ✓ Saving profile axes...
2026-01-01 16:24:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-133048458779584 | ✓ Saving topographic profile...
2026-01-01 16:24:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-133048458779584 | ✓ Saving interpretation data...
2026-01-01 16:24:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:197 | Thread-133048458779584 | ✓ Saving 3D interpretation data...
2026-01-01 16:24:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-133048458779584 | ✓ Saving profile axes...
2026-01-01 16:24:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-133048458779584 | ✓ Saving topographic profile...
2026-01-01 16:24:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:111 | Thread-133048458779584 | ✓ Saving geological profile...
2026-01-01 16:24:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:131 | Thread-133048458779584 | ✓ Saving structural profile...
2026-01-01 16:24:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:165 | Thread-133048458779584 | ✓ Saving drillhole data...
2026-01-01 16:24:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-133048458779584 | ✓ Saving interpretation data...
2026-01-01 16:24:46 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:31 | Thread-133048458779584 | Access denied for restricted feature: 3D Export
2026-01-01 16:24:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:214 | Thread-133048458779584 | 3D Export features are restricted for this user.
2026-01-01 16:24:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-133048458779584 | ✓ Saving profile axes...
2026-01-01 16:24:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-133048458779584 | ✓ Saving topographic profile...
2026-01-01 16:24:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-133048458779584 | ✓ Saving profile axes...
2026-01-01 16:24:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:165 | Thread-133048458779584 | ✓ Saving drillhole data...
2026-01-01 16:24:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:111 | Thread-133048458779584 | ✓ Saving geological profile...
2026-01-01 16:24:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-133048458779584 | ✓ Saving interpretation data...
2026-01-01 16:24:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:197 | Thread-133048458779584 | ✓ Saving 3D interpretation data...
2026-01-01 16:24:46 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-133048458779584 | Invalid section line layer, skipping 3D export.
2026-01-01 16:24:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-133048458779584 | ✓ Saving interpretation data...
2026-01-01 16:24:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:131 | Thread-133048458779584 | ✓ Saving structural profile...
2026-01-01 16:24:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-133048458779584 | ✓ Saving topographic profile...
2026-01-01 16:24:46 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:94 | Thread-133048458779584 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 16:24:46 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:94 | Thread-133048458779584 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-01 16:24:46 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:94 | Thread-133048458779584 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 16:25:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-128551257308096 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:25:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-128551257308096 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:25:09 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-128551257308096 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:25:09 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-128551257308096 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:25:09 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-128551257308096 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:25:09 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-128551257308096 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:25:09 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-128551257308096 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:25:09 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-128551257308096 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:25:09 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-128551257308096 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:25:09 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-128551257308096 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:25:09 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-128551257308096 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:25:09 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-128551257308096 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:25:09 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-128551257308096 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:25:09 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-128551257308096 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:25:09 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-128551257308096 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:25:09 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-128551257308096 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:25:09 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-128551257308096 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:25:09 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-128551257308096 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:25:09 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-128551257308096 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:25:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-128551257308096 | ✓ Saving profile axes...
2026-01-01 16:25:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-128551257308096 | ✓ Saving topographic profile...
2026-01-01 16:25:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-128551257308096 | ✓ Saving interpretation data...
2026-01-01 16:25:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:214 | Thread-128551257308096 | 3D Export features are restricted for this user.
2026-01-01 16:25:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-128551257308096 | ✓ Saving profile axes...
2026-01-01 16:25:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-128551257308096 | ✓ Saving topographic profile...
2026-01-01 16:25:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-128551257308096 | ✓ Saving interpretation data...
2026-01-01 16:25:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:197 | Thread-128551257308096 | ✓ Saving 3D interpretation data...
2026-01-01 16:25:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-128551257308096 | ✓ Saving profile axes...
2026-01-01 16:27:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-123504229956544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-123504229956544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:32 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-123504229956544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:32 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-123504229956544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:32 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-123504229956544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:32 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-123504229956544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:32 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-123504229956544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:32 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-123504229956544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:32 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-123504229956544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:32 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-123504229956544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:32 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-123504229956544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:32 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-123504229956544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:32 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-123504229956544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:32 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-123504229956544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:32 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-123504229956544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:32 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-123504229956544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:32 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-123504229956544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:32 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-123504229956544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:32 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-123504229956544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-123504229956544 | ✓ Saving profile axes...
2026-01-01 16:27:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-123504229956544 | ✓ Saving topographic profile...
2026-01-01 16:27:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-123504229956544 | ✓ Saving interpretation data...
2026-01-01 16:27:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:214 | Thread-123504229956544 | 3D Export features are restricted for this user.
2026-01-01 16:27:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-123504229956544 | ✓ Saving profile axes...
2026-01-01 16:27:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-123504229956544 | ✓ Saving topographic profile...
2026-01-01 16:27:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-123504229956544 | ✓ Saving interpretation data...
2026-01-01 16:27:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:197 | Thread-123504229956544 | ✓ Saving 3D interpretation data...
2026-01-01 16:27:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-123504229956544 | ✓ Saving profile axes...
2026-01-01 16:27:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-123504229956544 | ✓ Saving topographic profile...
2026-01-01 16:27:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:111 | Thread-123504229956544 | ✓ Saving geological profile...
2026-01-01 16:27:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:131 | Thread-123504229956544 | ✓ Saving structural profile...
2026-01-01 16:27:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:165 | Thread-123504229956544 | ✓ Saving drillhole data...
2026-01-01 16:27:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-123504229956544 | ✓ Saving interpretation data...
2026-01-01 16:27:32 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:31 | Thread-123504229956544 | Access denied for restricted feature: 3D Export
2026-01-01 16:27:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:214 | Thread-123504229956544 | 3D Export features are restricted for this user.
2026-01-01 16:27:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-123504229956544 | ✓ Saving profile axes...
2026-01-01 16:27:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-123504229956544 | ✓ Saving topographic profile...
2026-01-01 16:27:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-123504229956544 | ✓ Saving profile axes...
2026-01-01 16:27:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:165 | Thread-123504229956544 | ✓ Saving drillhole data...
2026-01-01 16:27:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:111 | Thread-123504229956544 | ✓ Saving geological profile...
2026-01-01 16:27:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-123504229956544 | ✓ Saving interpretation data...
2026-01-01 16:27:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:197 | Thread-123504229956544 | ✓ Saving 3D interpretation data...
2026-01-01 16:27:32 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-123504229956544 | Invalid section line layer, skipping 3D export.
2026-01-01 16:27:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-123504229956544 | ✓ Saving interpretation data...
2026-01-01 16:27:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:131 | Thread-123504229956544 | ✓ Saving structural profile...
2026-01-01 16:27:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-123504229956544 | ✓ Saving topographic profile...
2026-01-01 16:27:32 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:94 | Thread-123504229956544 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 16:27:32 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:94 | Thread-123504229956544 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-01 16:27:32 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:94 | Thread-123504229956544 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 16:27:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-125869793586112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-125869793586112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:58 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-125869793586112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:58 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-125869793586112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:58 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-125869793586112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:58 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-125869793586112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:58 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-125869793586112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:58 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-125869793586112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:58 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-125869793586112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:58 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-125869793586112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:58 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-125869793586112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:58 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-125869793586112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:58 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-125869793586112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:58 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-125869793586112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:58 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-125869793586112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:58 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-125869793586112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:58 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-125869793586112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:58 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-125869793586112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:58 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-125869793586112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:27:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-125869793586112 | ✓ Saving profile axes...
2026-01-01 16:27:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-125869793586112 | ✓ Saving topographic profile...
2026-01-01 16:27:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-125869793586112 | ✓ Saving interpretation data...
2026-01-01 16:27:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:214 | Thread-125869793586112 | 3D Export features are restricted for this user.
2026-01-01 16:27:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-125869793586112 | ✓ Saving profile axes...
2026-01-01 16:27:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-125869793586112 | ✓ Saving topographic profile...
2026-01-01 16:27:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-125869793586112 | ✓ Saving interpretation data...
2026-01-01 16:27:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:197 | Thread-125869793586112 | ✓ Saving 3D interpretation data...
2026-01-01 16:27:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-125869793586112 | ✓ Saving profile axes...
2026-01-01 16:27:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-125869793586112 | ✓ Saving topographic profile...
2026-01-01 16:27:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:111 | Thread-125869793586112 | ✓ Saving geological profile...
2026-01-01 16:27:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:131 | Thread-125869793586112 | ✓ Saving structural profile...
2026-01-01 16:27:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:165 | Thread-125869793586112 | ✓ Saving drillhole data...
2026-01-01 16:27:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-125869793586112 | ✓ Saving interpretation data...
2026-01-01 16:27:58 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:31 | Thread-125869793586112 | Access denied for restricted feature: 3D Export
2026-01-01 16:27:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:214 | Thread-125869793586112 | 3D Export features are restricted for this user.
2026-01-01 16:27:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-125869793586112 | ✓ Saving profile axes...
2026-01-01 16:27:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-125869793586112 | ✓ Saving topographic profile...
2026-01-01 16:27:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:223 | Thread-125869793586112 | ✓ Saving profile axes...
2026-01-01 16:27:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:165 | Thread-125869793586112 | ✓ Saving drillhole data...
2026-01-01 16:27:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:111 | Thread-125869793586112 | ✓ Saving geological profile...
2026-01-01 16:27:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-125869793586112 | ✓ Saving interpretation data...
2026-01-01 16:27:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:197 | Thread-125869793586112 | ✓ Saving 3D interpretation data...
2026-01-01 16:27:58 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-125869793586112 | Invalid section line layer, skipping 3D export.
2026-01-01 16:27:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-125869793586112 | ✓ Saving interpretation data...
2026-01-01 16:27:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:131 | Thread-125869793586112 | ✓ Saving structural profile...
2026-01-01 16:27:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-125869793586112 | ✓ Saving topographic profile...
2026-01-01 16:27:58 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:94 | Thread-125869793586112 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 16:27:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:94 | Thread-125869793586112 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-01 16:27:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:94 | Thread-125869793586112 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 16:28:27 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-125403195829184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:28:27 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-125403195829184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:28:27 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-125403195829184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:28:27 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-125403195829184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:28:27 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-125403195829184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:28:27 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-125403195829184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:28:27 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-125403195829184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:28:27 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-125403195829184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:28:27 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-125403195829184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:28:27 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-125403195829184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:28:27 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-125403195829184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:28:27 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-125403195829184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:28:27 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-125403195829184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:28:27 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-125403195829184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:28:27 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-125403195829184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:28:27 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-125403195829184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:28:27 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-125403195829184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:28:27 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-125403195829184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:28:27 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-125403195829184 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:28:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-125403195829184 | ✓ Saving profile axes...
2026-01-01 16:28:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-125403195829184 | ✓ Saving topographic profile...
2026-01-01 16:28:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-125403195829184 | ✓ Saving interpretation data...
2026-01-01 16:28:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-125403195829184 | 3D Export features are restricted for this user.
2026-01-01 16:28:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-125403195829184 | ✓ Saving profile axes...
2026-01-01 16:28:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-125403195829184 | ✓ Saving topographic profile...
2026-01-01 16:28:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-125403195829184 | ✓ Saving interpretation data...
2026-01-01 16:28:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-125403195829184 | ✓ Saving 3D interpretation data...
2026-01-01 16:28:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-125403195829184 | ✓ Saving topographic profile...
2026-01-01 16:28:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:111 | Thread-125403195829184 | ✓ Saving geological profile...
2026-01-01 16:28:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:131 | Thread-125403195829184 | ✓ Saving structural profile...
2026-01-01 16:28:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:165 | Thread-125403195829184 | ✓ Saving drillhole data...
2026-01-01 16:28:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-125403195829184 | ✓ Saving interpretation data...
2026-01-01 16:28:27 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:31 | Thread-125403195829184 | Access denied for restricted feature: 3D Export
2026-01-01 16:28:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-125403195829184 | 3D Export features are restricted for this user.
2026-01-01 16:28:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-125403195829184 | ✓ Saving profile axes...
2026-01-01 16:28:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-125403195829184 | ✓ Saving topographic profile...
2026-01-01 16:28:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-125403195829184 | ✓ Saving profile axes...
2026-01-01 16:28:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:165 | Thread-125403195829184 | ✓ Saving drillhole data...
2026-01-01 16:28:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:111 | Thread-125403195829184 | ✓ Saving geological profile...
2026-01-01 16:28:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-125403195829184 | ✓ Saving interpretation data...
2026-01-01 16:28:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-125403195829184 | ✓ Saving 3D interpretation data...
2026-01-01 16:28:27 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-125403195829184 | Invalid section line layer, skipping 3D export.
2026-01-01 16:28:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-125403195829184 | ✓ Saving interpretation data...
2026-01-01 16:28:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:131 | Thread-125403195829184 | ✓ Saving structural profile...
2026-01-01 16:28:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-125403195829184 | ✓ Saving topographic profile...
2026-01-01 16:28:27 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:94 | Thread-125403195829184 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 16:28:27 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:94 | Thread-125403195829184 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-01 16:28:27 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:94 | Thread-125403195829184 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 16:30:18 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-129155287550912 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:30:18 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-129155287550912 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:30:18 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-129155287550912 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:30:18 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-129155287550912 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:30:18 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-129155287550912 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:30:18 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-129155287550912 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:30:18 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-129155287550912 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:30:18 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-129155287550912 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:30:18 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-129155287550912 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:30:18 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-129155287550912 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:30:18 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-129155287550912 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:30:18 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-129155287550912 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:30:18 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-129155287550912 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:30:18 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-129155287550912 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:30:18 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-129155287550912 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:30:18 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-129155287550912 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:30:18 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-129155287550912 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:30:18 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-129155287550912 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:30:18 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-129155287550912 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:30:18 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129155287550912 | ✓ Saving profile axes...
2026-01-01 16:30:18 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-129155287550912 | ✓ Saving topographic profile...
2026-01-01 16:30:18 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129155287550912 | ✓ Saving interpretation data...
2026-01-01 16:30:18 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-129155287550912 | 3D Export features are restricted for this user.
2026-01-01 16:30:18 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129155287550912 | ✓ Saving profile axes...
2026-01-01 16:30:18 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-129155287550912 | ✓ Saving topographic profile...
2026-01-01 16:30:18 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129155287550912 | ✓ Saving interpretation data...
2026-01-01 16:30:18 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-129155287550912 | ✓ Saving 3D interpretation data...
2026-01-01 16:30:18 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129155287550912 | ✓ Saving profile axes...
2026-01-01 16:30:18 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-129155287550912 | ✓ Saving topographic profile...
2026-01-01 16:30:18 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:111 | Thread-129155287550912 | ✓ Saving geological profile...
2026-01-01 16:30:18 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:131 | Thread-129155287550912 | ✓ Saving structural profile...
2026-01-01 16:30:18 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:165 | Thread-129155287550912 | ✓ Saving drillhole data...
2026-01-01 16:30:18 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129155287550912 | ✓ Saving interpretation data...
2026-01-01 16:30:18 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:31 | Thread-129155287550912 | Access denied for restricted feature: 3D Export
2026-01-01 16:30:18 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-129155287550912 | 3D Export features are restricted for this user.
2026-01-01 16:30:18 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129155287550912 | ✓ Saving profile axes...
2026-01-01 16:30:18 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-129155287550912 | ✓ Saving topographic profile...
2026-01-01 16:30:18 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129155287550912 | ✓ Saving profile axes...
2026-01-01 16:30:18 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:165 | Thread-129155287550912 | ✓ Saving drillhole data...
2026-01-01 16:30:18 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:111 | Thread-129155287550912 | ✓ Saving geological profile...
2026-01-01 16:30:18 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129155287550912 | ✓ Saving interpretation data...
2026-01-01 16:30:18 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-129155287550912 | ✓ Saving 3D interpretation data...
2026-01-01 16:30:18 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-129155287550912 | Invalid section line layer, skipping 3D export.
2026-01-01 16:30:18 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129155287550912 | ✓ Saving interpretation data...
2026-01-01 16:30:18 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:131 | Thread-129155287550912 | ✓ Saving structural profile...
2026-01-01 16:30:18 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:93 | Thread-129155287550912 | ✓ Saving topographic profile...
2026-01-01 16:30:18 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:94 | Thread-129155287550912 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 16:30:18 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:94 | Thread-129155287550912 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-01 16:30:18 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:94 | Thread-129155287550912 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 16:31:30 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:30 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:30 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:30 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:31 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:31 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:31 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:31 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:31 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:31 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:31 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:31 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:31 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:31 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:32 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:32 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:32 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:32 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:32 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:32 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:32 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:32 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:32 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:32 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:32 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:32 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:32 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:32 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:32 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:33 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:31:33 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-128248295713728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:37:59 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-134453062671296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:37:59 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-134453062671296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:37:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-134453062671296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:37:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-134453062671296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:37:59 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-134453062671296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:37:59 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-134453062671296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:37:59 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-134453062671296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:37:59 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-134453062671296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:37:59 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-134453062671296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:37:59 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-134453062671296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:37:59 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-134453062671296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:37:59 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-134453062671296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:37:59 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-134453062671296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:37:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:94 | Thread-134453062671296 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 16:37:59 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:150 | Thread-134453062671296 | Generated 3D geometry for polygon p1 is invalid. Attempting to fix.
2026-01-01 16:37:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:94 | Thread-134453062671296 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-01 16:37:59 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:150 | Thread-134453062671296 | Generated 3D geometry for polygon test_poly is invalid. Attempting to fix.
2026-01-01 16:37:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:94 | Thread-134453062671296 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 16:37:59 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:150 | Thread-134453062671296 | Generated 3D geometry for polygon fold is invalid. Attempting to fix.
2026-01-01 16:39:57 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:57 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:57 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:57 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:57 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:57 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:58 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:58 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:58 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:58 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:58 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:58 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:58 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:58 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:58 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:58 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:59 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:59 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:59 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:59 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:59 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:59 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:59 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:59 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:59 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:59 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:59 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:59 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:59 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:59 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:39:59 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:40:00 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:40:00 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-129821182233536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:55 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:55 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:55 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:55 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:56 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:57 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:57 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:57 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:57 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:57 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:57 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:57 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:57 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:57 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:57 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:58 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:58 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:58 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:58 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:58 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:58 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:58 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:58 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:58 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:58 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:58 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:58 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:58 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:58 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:59 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:47:59 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-136241742277568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:53:49 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-127979506637760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:53:49 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-127979506637760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:53:49 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-127979506637760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:53:49 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-127979506637760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:53:49 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-127979506637760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:53:49 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-127979506637760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:53:49 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-127979506637760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:53:49 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-127979506637760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:53:49 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-127979506637760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:53:49 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-127979506637760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:53:49 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-127979506637760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:53:49 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-127979506637760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:53:49 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-127979506637760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:53:49 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:95 | Thread-127979506637760 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 16:53:49 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:152 | Thread-127979506637760 | Generated 3D geometry for polygon p1 is invalid. Attempting to fix.
2026-01-01 16:53:49 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:95 | Thread-127979506637760 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-01 16:53:49 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:152 | Thread-127979506637760 | Generated 3D geometry for polygon test_poly is invalid. Attempting to fix.
2026-01-01 16:53:49 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:95 | Thread-127979506637760 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 16:53:49 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:152 | Thread-127979506637760 | Generated 3D geometry for polygon fold is invalid. Attempting to fix.
2026-01-01 16:54:42 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:42 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:42 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:42 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:43 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:43 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:43 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:43 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:43 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:43 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:43 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:43 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:43 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:43 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:43 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:44 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:44 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:44 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:44 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:44 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:44 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:44 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:44 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:44 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:44 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:44 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:44 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:44 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:44 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:44 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:44 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:44 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:44 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:44 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:44 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:46 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:54:46 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-127850584763328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:59:50 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-140479838321600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:59:50 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-140479838321600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:59:50 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-140479838321600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:59:50 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-140479838321600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:59:50 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-140479838321600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:59:50 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-140479838321600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:59:50 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-140479838321600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:59:50 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-140479838321600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:59:50 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-140479838321600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:59:50 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-140479838321600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:59:50 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-140479838321600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:59:50 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-140479838321600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:59:50 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-140479838321600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 16:59:50 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:95 | Thread-140479838321600 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 16:59:50 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:152 | Thread-140479838321600 | Generated 3D geometry for polygon p1 is invalid. Attempting to fix.
2026-01-01 16:59:50 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:95 | Thread-140479838321600 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-01 16:59:50 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:152 | Thread-140479838321600 | Generated 3D geometry for polygon test_poly is invalid. Attempting to fix.
2026-01-01 16:59:50 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:95 | Thread-140479838321600 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 16:59:50 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:152 | Thread-140479838321600 | Generated 3D geometry for polygon fold is invalid. Attempting to fix.
2026-01-01 17:00:28 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:28 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:28 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:28 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:29 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:30 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:30 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:30 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:30 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:30 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:30 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:30 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:30 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:30 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:30 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:31 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:31 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:31 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:31 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:31 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:31 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:31 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:31 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:31 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:31 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:31 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:31 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:31 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:31 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:32 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:00:32 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-126127138888640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:04:59 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-123258440313792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:04:59 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-123258440313792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:04:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-123258440313792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:04:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-123258440313792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:04:59 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-123258440313792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:04:59 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-123258440313792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:04:59 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-123258440313792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:04:59 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-123258440313792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:04:59 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-123258440313792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:04:59 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-123258440313792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:04:59 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-123258440313792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:04:59 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-123258440313792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:04:59 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-123258440313792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:04:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:95 | Thread-123258440313792 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 17:04:59 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:152 | Thread-123258440313792 | Generated 3D geometry for polygon p1 is invalid. Attempting to fix.
2026-01-01 17:04:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:95 | Thread-123258440313792 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-01 17:04:59 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:152 | Thread-123258440313792 | Generated 3D geometry for polygon test_poly is invalid. Attempting to fix.
2026-01-01 17:04:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:95 | Thread-123258440313792 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 17:04:59 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:152 | Thread-123258440313792 | Generated 3D geometry for polygon fold is invalid. Attempting to fix.
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-138023772572608 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-138023772572608 | create_drillhole_trace_layer called with 1 holes
2026-01-01 17:09:22 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-138023772572608 | Adding 1 drillhole trace features to layer
2026-01-01 17:09:22 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:103 | Thread-138023772572608 | Failed to create memory layer: Fail
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-138023772572608 | create_drillhole_trace_layer called with 0 holes
2026-01-01 17:09:22 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:264 | Thread-138023772572608 | No drillhole data provided for trace layer
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-138023772572608 | create_drillhole_trace_layer called with 1 holes
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:276 | Thread-138023772572608 | Skipping hole H1: insufficient trace points (1)
2026-01-01 17:09:22 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:289 | Thread-138023772572608 | Adding 0 drillhole trace features to layer
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:260 | Thread-138023772572608 | create_drillhole_trace_layer called with 1 holes
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-138023772572608 | render() called
2026-01-01 17:09:22 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:141 | Thread-138023772572608 | No valid layers to render
2026-01-01 17:09:22 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:206 | Thread-138023772572608 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 183, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-138023772572608 | render() called
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-138023772572608 | render() called
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-138023772572608 | render() called
2026-01-01 17:09:22 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:141 | Thread-138023772572608 | No valid layers to render
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-138023772572608 | render() called
2026-01-01 17:09:22 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-138023772572608 | render() called
2026-01-01 17:10:43 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:43 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:43 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:43 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:43 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:43 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:44 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:44 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:45 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:45 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:45 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:45 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:45 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:45 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:45 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:45 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:45 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:45 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:46 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:46 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:46 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:46 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:46 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:46 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:46 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:46 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:46 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:46 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:46 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:46 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:46 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:46 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:47 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:10:47 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-133165267897280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:33:22 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-138979739380672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:33:22 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-138979739380672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:33:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-138979739380672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:33:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-138979739380672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:33:22 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-138979739380672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:33:22 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-138979739380672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:33:23 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-138979739380672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:33:23 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-138979739380672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:33:23 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-138979739380672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:33:23 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-138979739380672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:33:23 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-138979739380672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:33:23 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-138979739380672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:33:23 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-138979739380672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:33:23 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:95 | Thread-138979739380672 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 17:33:23 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:95 | Thread-138979739380672 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-01 17:33:23 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:95 | Thread-138979739380672 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 17:33:57 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-128514818358208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:33:57 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-128514818358208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:33:57 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-128514818358208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:33:57 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-128514818358208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:33:57 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-128514818358208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:33:57 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-128514818358208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:33:57 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-128514818358208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:33:57 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-128514818358208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:33:57 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-128514818358208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:33:57 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-128514818358208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:33:57 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-128514818358208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:33:57 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-128514818358208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:33:57 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-128514818358208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:33:57 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:96 | Thread-128514818358208 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 17:33:57 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:96 | Thread-128514818358208 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-01 17:33:57 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:96 | Thread-128514818358208 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 17:35:06 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-135583219321792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:35:06 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-135583219321792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:35:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-135583219321792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:35:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-135583219321792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:35:06 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-135583219321792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:35:06 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-135583219321792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:35:06 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-135583219321792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:35:06 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-135583219321792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:35:06 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-135583219321792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:35:06 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-135583219321792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:35:06 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-135583219321792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:35:06 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-135583219321792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:35:06 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-135583219321792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:35:06 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:96 | Thread-135583219321792 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 17:35:06 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:96 | Thread-135583219321792 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-01 17:35:06 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:96 | Thread-135583219321792 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 17:37:07 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:07 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:07 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:07 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:08 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:08 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:08 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:08 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:08 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:08 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:08 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:08 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:08 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:08 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:09 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:09 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:09 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:09 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:09 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:09 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:10 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:10 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:10 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:10 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:10 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:10 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:10 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:10 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:10 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:10 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:11 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 17:37:11 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-139585680473024 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:19:45 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-140085017349056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:19:45 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-140085017349056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:19:45 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-140085017349056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:19:45 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-140085017349056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:19:45 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-140085017349056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:19:45 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-140085017349056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:19:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-140085017349056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:19:46 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-140085017349056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:19:46 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-140085017349056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:19:46 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-140085017349056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:19:46 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-140085017349056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:19:46 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-140085017349056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:19:46 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-140085017349056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:19:46 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-140085017349056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:19:46 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-140085017349056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:19:46 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-140085017349056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:19:46 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-140085017349056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:19:47 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-140085017349056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:19:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-140085017349056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:19:47 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-140085017349056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:19:47 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-140085017349056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:19:47 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-140085017349056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:19:47 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-140085017349056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:19:47 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-140085017349056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:19:47 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-140085017349056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:19:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-140085017349056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:19:47 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-140085017349056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:19:47 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-140085017349056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:19:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-140085017349056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:19:48 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-140085017349056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:39 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:39 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:39 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:39 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:39 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:39 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:40 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:40 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:40 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:40 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:40 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:40 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:40 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:40 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:40 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:40 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:41 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:41 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:41 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:41 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:41 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:41 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:41 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:41 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:41 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:41 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:41 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:41 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:42 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 18:21:42 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-135983421991872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:22 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:22 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:22 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:22 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:23 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:24 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:24 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:24 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:24 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:24 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:24 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:24 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:24 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:24 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:24 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:25 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:25 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:25 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:25 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:25 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:25 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:25 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:25 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:25 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:25 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:25 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:25 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:25 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:25 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:26 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:48:26 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-127832885939136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:57:59 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-128154756254656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:57:59 | DEBUG    | SecInterp.exporters.csv_exporter | get_logger:127 | Thread-128154756254656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:57:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-128154756254656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:57:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-128154756254656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:57:59 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-128154756254656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:57:59 | DEBUG    | SecInterp.exporters.drillhole_exporters | get_logger:127 | Thread-128154756254656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:57:59 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-128154756254656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:57:59 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-128154756254656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:57:59 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-128154756254656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:57:59 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-128154756254656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:57:59 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-128154756254656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:57:59 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-128154756254656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:57:59 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-128154756254656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:57:59 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-128154756254656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:57:59 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-128154756254656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:57:59 | DEBUG    | SecInterp.exporters.interpretation_exporters | get_logger:127 | Thread-128154756254656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:57:59 | DEBUG    | SecInterp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-128154756254656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:57:59 | DEBUG    | SecInterp.exporters.image_exporter | get_logger:127 | Thread-128154756254656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:57:59 | DEBUG    | SecInterp.exporters.pdf_exporter | get_logger:127 | Thread-128154756254656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:57:59 | DEBUG    | SecInterp.exporters.profile_exporters | get_logger:127 | Thread-128154756254656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:57:59 | DEBUG    | SecInterp.exporters.shp_exporter | get_logger:127 | Thread-128154756254656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:57:59 | DEBUG    | SecInterp.exporters.svg_exporter | get_logger:127 | Thread-128154756254656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:57:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:108 | Thread-128154756254656 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 20:57:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:108 | Thread-128154756254656 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-01 20:57:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:108 | Thread-128154756254656 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-01 20:58:09 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-139501599144896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:09 | DEBUG    | SecInterp.exporters.csv_exporter | get_logger:127 | Thread-139501599144896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-139501599144896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-139501599144896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:09 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-139501599144896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:09 | DEBUG    | SecInterp.exporters.drillhole_exporters | get_logger:127 | Thread-139501599144896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:09 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-139501599144896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:09 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-139501599144896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:09 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-139501599144896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:09 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-139501599144896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:09 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-139501599144896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:09 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-139501599144896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:09 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-139501599144896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:09 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-139501599144896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:09 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-139501599144896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:09 | DEBUG    | SecInterp.exporters.interpretation_exporters | get_logger:127 | Thread-139501599144896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:09 | DEBUG    | SecInterp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-139501599144896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:09 | DEBUG    | SecInterp.exporters.image_exporter | get_logger:127 | Thread-139501599144896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:09 | DEBUG    | SecInterp.exporters.pdf_exporter | get_logger:127 | Thread-139501599144896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:09 | DEBUG    | SecInterp.exporters.profile_exporters | get_logger:127 | Thread-139501599144896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:09 | DEBUG    | SecInterp.exporters.shp_exporter | get_logger:127 | Thread-139501599144896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:09 | DEBUG    | SecInterp.exporters.svg_exporter | get_logger:127 | Thread-139501599144896 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:57 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-135242664954816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:57 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-135242664954816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:57 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-135242664954816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:57 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-135242664954816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:57 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-135242664954816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:57 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-135242664954816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:57 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-135242664954816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:57 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-135242664954816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:57 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-135242664954816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:57 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-135242664954816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:57 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-135242664954816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:57 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-135242664954816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:58:57 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-135242664954816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:59:11 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-138581621455808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:59:11 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-138581621455808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:59:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-138581621455808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:59:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-138581621455808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:59:11 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-138581621455808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:59:11 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-138581621455808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:59:11 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-138581621455808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:59:11 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-138581621455808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:59:11 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-138581621455808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:59:11 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-138581621455808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:59:11 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-138581621455808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:59:11 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-138581621455808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:59:11 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-138581621455808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 20:59:12 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | export:142 | Thread-138581621455808 | Successfully exported 1 interpretations to /tmp/test_dynamic.shp
2026-01-01 21:03:36 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:36 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:36 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:36 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:37 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:37 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:37 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:37 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:37 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:37 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:37 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:37 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:37 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:37 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:37 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:38 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:38 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:38 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:38 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:38 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:38 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:38 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:38 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:38 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:38 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:38 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:38 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:38 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:38 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:38 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:39 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:03:39 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-130811910831040 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:04 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-134184234376128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:57 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-129887435258816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:57 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-129887435258816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:57 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-129887435258816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:57 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-129887435258816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:57 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-129887435258816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:57 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-129887435258816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:57 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-129887435258816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:57 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-129887435258816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:57 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-129887435258816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:57 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-129887435258816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:57 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-129887435258816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:57 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-129887435258816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:57 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-129887435258816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:07:57 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | export:142 | Thread-129887435258816 | Successfully exported 1 interpretations to /tmp/test_dynamic.shp
2026-01-01 21:08:33 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:33 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:33 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:33 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:33 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:33 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:33 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:34 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:34 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:34 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:34 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:34 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:34 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:34 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:34 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:34 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:34 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:34 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:35 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:35 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:35 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:35 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:35 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:35 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:35 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:35 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:35 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:35 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:35 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:35 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:35 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:35 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:35 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:35 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:35 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:35 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:36 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:08:36 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-134292826934208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:27 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:27 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:27 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:27 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:27 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:27 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:27 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:28 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:28 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:28 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:28 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:28 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:28 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:28 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:28 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:28 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:28 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:28 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:29 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:29 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:29 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:29 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:29 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:29 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:29 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:29 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:29 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:29 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:29 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:29 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:29 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:29 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:30 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:13:30 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-137109499399104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:07 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:07 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:07 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:07 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:08 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:09 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:09 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:09 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:09 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:09 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:09 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:09 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:09 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:09 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:09 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:09 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:10 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:10 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:10 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:10 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:10 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:10 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:10 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:10 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:10 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:10 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:10 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:10 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:10 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:10 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:11 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:17:11 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-134297386814400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:21:58 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:21:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:21:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:21:58 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:21:59 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:21:59 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:21:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:21:59 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:22:00 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:22:00 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:22:00 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:22:00 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:22:00 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:22:00 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:22:00 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:22:00 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:22:00 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:22:00 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:22:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:22:01 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:22:01 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:22:01 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:22:01 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:22:01 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:22:01 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:22:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:22:01 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:22:01 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:22:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:22:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:22:01 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:22:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:22:01 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:22:01 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:22:01 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:22:01 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:22:01 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:22:02 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 21:22:02 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-131819165899712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:53 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:54 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:54 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:54 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:54 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:54 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:54 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:54 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:55 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:55 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:55 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:55 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:55 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:55 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:55 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:55 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:55 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:55 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:56 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:56 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:56 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:56 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:56 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:56 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:56 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:56 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:56 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:56 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:56 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:56 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:56 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:56 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:57 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-01 23:53:57 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-126720005479360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:19 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:19 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:19 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:19 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:20 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:21 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:21 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:21 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:21 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:21 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:21 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:21 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:21 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:21 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:21 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:22 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:22 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:22 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:22 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:22 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:22 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:22 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:22 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:22 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:22 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:22 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:22 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:22 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:22 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:22 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:00:22 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-123472955198400 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:13 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:13 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:13 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:13 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:13 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:14 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:14 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:14 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:14 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:14 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:14 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:14 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:14 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:14 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:14 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:15 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:15 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:15 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:15 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:15 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:15 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:15 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:15 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:15 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:15 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:15 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:15 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:15 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:16 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:07:16 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-140124703243200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:41 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:41 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:41 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:41 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:42 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:43 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:43 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:43 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:43 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:43 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:43 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:43 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:43 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:43 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:43 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:43 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:43 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:43 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:43 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:43 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:43 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:43 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:43 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:43 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:43 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:43 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:43 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:43 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:43 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:43 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:44 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:08:44 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-125041066765248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:04 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:04 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:04 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:04 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:05 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:05 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:05 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:05 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:05 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:05 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:05 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:05 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:05 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:05 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:05 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:05 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:06 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:06 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:06 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:06 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:06 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:06 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:06 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:06 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:06 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:06 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:06 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:06 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:06 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:06 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:07 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 00:14:07 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-138965915081664 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-138797709745088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:351 | Thread-138797709745088 | create_drillhole_trace_layer called with 1 holes
2026-01-02 07:57:29 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:380 | Thread-138797709745088 | Adding 1 drillhole trace features to layer
2026-01-02 07:57:29 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:107 | Thread-138797709745088 | Failed to create memory layer: Fail
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:351 | Thread-138797709745088 | create_drillhole_trace_layer called with 0 holes
2026-01-02 07:57:29 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:355 | Thread-138797709745088 | No drillhole data provided for trace layer
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:351 | Thread-138797709745088 | create_drillhole_trace_layer called with 1 holes
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:367 | Thread-138797709745088 | Skipping hole H1: insufficient trace points (1)
2026-01-02 07:57:29 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:380 | Thread-138797709745088 | Adding 0 drillhole trace features to layer
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:351 | Thread-138797709745088 | create_drillhole_trace_layer called with 1 holes
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-138797709745088 | render() called
2026-01-02 07:57:29 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:147 | Thread-138797709745088 | No valid layers to render
2026-01-02 07:57:29 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:212 | Thread-138797709745088 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 189, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-138797709745088 | render() called
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-138797709745088 | render() called
2026-01-02 07:57:29 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-138797709745088 | render() called
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-123263320976320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:351 | Thread-123263320976320 | create_drillhole_trace_layer called with 1 holes
2026-01-02 07:58:41 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:380 | Thread-123263320976320 | Adding 1 drillhole trace features to layer
2026-01-02 07:58:41 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:107 | Thread-123263320976320 | Failed to create memory layer: Fail
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:351 | Thread-123263320976320 | create_drillhole_trace_layer called with 0 holes
2026-01-02 07:58:41 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:355 | Thread-123263320976320 | No drillhole data provided for trace layer
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:351 | Thread-123263320976320 | create_drillhole_trace_layer called with 1 holes
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:367 | Thread-123263320976320 | Skipping hole H1: insufficient trace points (1)
2026-01-02 07:58:41 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:380 | Thread-123263320976320 | Adding 0 drillhole trace features to layer
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:351 | Thread-123263320976320 | create_drillhole_trace_layer called with 1 holes
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-123263320976320 | render() called
2026-01-02 07:58:41 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:147 | Thread-123263320976320 | No valid layers to render
2026-01-02 07:58:41 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:212 | Thread-123263320976320 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 189, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-123263320976320 | render() called
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-123263320976320 | render() called
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-123263320976320 | render() called
2026-01-02 07:58:41 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:147 | Thread-123263320976320 | No valid layers to render
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-123263320976320 | render() called
2026-01-02 07:58:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:91 | Thread-123263320976320 | render() called
2026-01-02 08:00:40 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-135984294611904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 08:00:40 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-135984294611904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 08:00:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-135984294611904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 08:00:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-135984294611904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 08:00:40 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-135984294611904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 08:00:40 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-135984294611904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 08:00:40 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-135984294611904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 08:00:40 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-135984294611904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 08:00:40 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-135984294611904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 08:00:40 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-135984294611904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 08:00:40 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-135984294611904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 08:00:40 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-135984294611904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 08:00:40 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-135984294611904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 08:00:41 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:320 | Thread-135984294611904 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-02 08:00:41 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:100 | Thread-135984294611904 | Failed to generate QML style: QgsRendererCategory(): arguments did not match any overloaded call:
  overload 1: too many arguments
  overload 2: argument 3 has unexpected type 'MagicMock'
  overload 3: argument 1 has unexpected type 'MagicMock'
2026-01-02 08:00:41 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:320 | Thread-135984294611904 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-02 08:00:41 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _configure_3d_renderer:404 | Thread-135984294611904 | Configured native 3D renderer in QML
2026-01-02 08:00:41 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:178 | Thread-135984294611904 | Generated QML style: dummy.qml
2026-01-02 08:00:41 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:320 | Thread-135984294611904 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-02 08:00:41 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _configure_3d_renderer:404 | Thread-135984294611904 | Configured native 3D renderer in QML
2026-01-02 08:00:41 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:178 | Thread-135984294611904 | Generated QML style: dummy.qml
2026-01-02 08:02:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-126727406664640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 08:02:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-126727406664640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 08:02:26 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-126727406664640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 08:02:26 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-126727406664640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 08:02:26 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-126727406664640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 08:02:26 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-126727406664640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 08:02:26 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-126727406664640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 08:02:26 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-126727406664640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-02 08:02:26 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:79 | Thread-126727406664640 | Projecting collars from Test Layer with buffer 50.0m
2026-01-02 08:02:26 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:94 | Thread-126727406664640 | No collars found within buffer area.
2026-01-02 08:02:26 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:79 | Thread-126727406664640 | Projecting collars from Test Layer with buffer 50.0m
2026-01-02 08:02:26 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:115 | Thread-126727406664640 | DrillholeService.project_collars END: Found 1 collars.
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-139969025465280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-139969025465280 | Config set: /SecInterp/scale = 500.0
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-139969025465280 | Config set: /SecInterp/vert_exag = 1.0
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-139969025465280 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-139969025465280 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-139969025465280 | Config set: /SecInterp/last_output_dir =
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-139969025465280 | Config set: /SecInterp/dpi = 300
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-139969025465280 | Config set: /SecInterp/preview_width = 800
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-139969025465280 | Config set: /SecInterp/preview_height = 600
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-139969025465280 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-139969025465280 | Config set: /SecInterp/export_quality = 95
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-139969025465280 | Config set: /SecInterp/auto_lod = True
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-139969025465280 | Config set: /SecInterp/max_preview_points = 10000
2026-01-03 10:13:10 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:83 | Thread-139969025465280 | Configuration reset to defaults
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-139969025465280 | Config set: /SecInterp/scale = 200.0
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139969025465280 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139969025465280 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:13:10 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139969025465280 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:13:10 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-139969025465280 | Projecting collars from Test Layer with buffer 50.0m
2026-01-03 10:13:10 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-139969025465280 | No collars found within buffer area.
2026-01-03 10:13:10 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-139969025465280 | Projecting collars from Test Layer with buffer 50.0m
2026-01-03 10:13:10 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-139969025465280 | DrillholeService.project_collars END: Found 1 collars.
2026-01-03 10:13:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-139969025465280 | ✓ Saving profile axes...
2026-01-03 10:13:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-139969025465280 | ✓ Saving topographic profile...
2026-01-03 10:13:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-139969025465280 | ✓ Saving interpretation data...
2026-01-03 10:13:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-139969025465280 | 3D Export features are restricted for this user.
2026-01-03 10:13:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-139969025465280 | ✓ Saving profile axes...
2026-01-03 10:13:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-139969025465280 | ✓ Saving topographic profile...
2026-01-03 10:13:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-139969025465280 | ✓ Saving interpretation data...
2026-01-03 10:13:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-139969025465280 | ✓ Saving 3D interpretation data...
2026-01-03 10:13:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-139969025465280 | ✓ Saving profile axes...
2026-01-03 10:13:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-139969025465280 | ✓ Saving topographic profile...
2026-01-03 10:13:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-139969025465280 | ✓ Saving geological profile...
2026-01-03 10:13:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-139969025465280 | ✓ Saving structural profile...
2026-01-03 10:13:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-139969025465280 | ✓ Saving drillhole data...
2026-01-03 10:13:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-139969025465280 | ✓ Saving interpretation data...
2026-01-03 10:13:10 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-139969025465280 | Access denied for restricted feature: 3D Export
2026-01-03 10:13:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-139969025465280 | 3D Export features are restricted for this user.
2026-01-03 10:13:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-139969025465280 | ✓ Saving profile axes...
2026-01-03 10:13:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-139969025465280 | ✓ Saving topographic profile...
2026-01-03 10:13:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-139969025465280 | No interpretations provided for export.
2026-01-03 10:13:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-139969025465280 | ✓ Saving profile axes...
2026-01-03 10:13:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-139969025465280 | ✓ Saving drillhole data...
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-139969025465280 | ✓ Saving geological profile...
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-139969025465280 | ✓ Saving interpretation data...
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-139969025465280 | ✓ Saving 3D interpretation data...
2026-01-03 10:13:11 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-139969025465280 | Invalid section line layer, skipping 3D export.
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-139969025465280 | ✓ Saving interpretation data...
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-139969025465280 | ✓ Saving structural profile...
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-139969025465280 | ✓ Saving topographic profile...
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-139969025465280 | Generating master profile with interval=10.00
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-139969025465280 | Generated 1 geological segments
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-139969025465280 | Generating master profile with interval=50.00
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-139969025465280 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-139969025465280 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-139969025465280 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-139969025465280 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-139969025465280 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-139969025465280 | Running geometry operation: test
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-139969025465280 | Generated 1 drillhole traces
2026-01-03 10:13:11 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-139969025465280 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-03 10:13:11 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-139969025465280 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-139969025465280 | Generated 1 drillhole traces
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-139969025465280 | Drillhole preview skipped: No Collar ID field selected.
2026-01-03 10:13:11 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-139969025465280 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:13:11 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-139969025465280 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:13:11 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-139969025465280 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:13:11 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-139969025465280 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:13:11 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-139969025465280 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-139969025465280 | Analyzing structures in Structure Layer with buffer 10m
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-139969025465280 | Processed 1 structural measurements from Structure Layer
2026-01-03 10:13:11 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-139969025465280 | Test Title: Test Message
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-139969025465280 | Test Title: Test Message
2026-01-03 10:13:11 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-139969025465280 | Test Title: Test Message
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-139969025465280 | CRITICAL_OP: finalize_polygon | points=2
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-139969025465280 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-03 10:13:11 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-139969025465280 | finalize_polygon() aborted - less than 3 points
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-139969025465280 | CRITICAL_OP: finalize_polygon | points=3
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-139969025465280 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-139969025465280 | finalize_polygon() - emitting polygonFinished signal for 1033cec0-9d5e-4402-a358-455c216ee8de
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-139969025465280 | Interpretation polygon finalized with 3 vertices, ID: 1033cec0-9d5e-4402-a358-455c216ee8de
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-139969025465280 | finalize_polygon() completed
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-139969025465280 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-139969025465280 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-139969025465280 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-139969025465280 | ProfileInterpretationTool.reset() completed
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-139969025465280 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-139969025465280 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-139969025465280 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-139969025465280 | ProfileInterpretationTool.reset() completed
2026-01-03 10:13:11 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-139969025465280 | Failed to create locator for layer layer1: mock error
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-139969025465280 | ProfileInterpretationTool.activate() called
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-139969025465280 | ProfileInterpretationTool activated successfully
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-139969025465280 | ProfileInterpretationTool.deactivate() called
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-139969025465280 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-139969025465280 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-139969025465280 | ProfileInterpretationTool.reset() completed
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-139969025465280 | ProfileInterpretationTool deactivated successfully
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-139969025465280 | Point 1 added: 0.00, 0.00
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-139969025465280 | Point 2 added: 100.00, 100.00
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-139969025465280 | Point 1 added: 50.00, 50.00
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-139969025465280 | reset() called, finalized=False
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-139969025465280 | finalize_measurement called with 1 points
2026-01-03 10:13:11 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-139969025465280 | Cannot finalize measurement with less than 2 points
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-139969025465280 | finalize_measurement called with 2 points
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-139969025465280 | Setting finalized = True
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-139969025465280 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-139969025465280 | Switching to pan tool to stop measurement
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-139969025465280 | Pan tool activated - measurement should be frozen
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-139969025465280 | Ignoring click - measurement is finalized
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-139969025465280 | finalize_measurement called with 2 points
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-139969025465280 | Setting finalized = True
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-139969025465280 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-139969025465280 | Switching to pan tool to stop measurement
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-139969025465280 | Pan tool activated - measurement should be frozen
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-139969025465280 | reset() called, finalized=False
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-139969025465280 | reset() called, finalized=False
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-139969025465280 | reset() called, finalized=True
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-139969025465280 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-139969025465280 | reset() called, finalized=False
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-139969025465280 | finalize_measurement called with 2 points
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-139969025465280 | Setting finalized = True
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-139969025465280 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-139969025465280 | Rubber band redrawn with final points only
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-139969025465280 | Switching to pan tool to stop measurement
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-139969025465280 | Pan tool activated - measurement should be frozen
2026-01-03 10:13:11 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-139969025465280 | Failed to create locator for layer layer1: mock error
2026-01-03 10:13:11 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-139969025465280 | Failed to create locator for layer l2: fail
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-139969025465280 | ProfileMeasureTool activated
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-139969025465280 | reset() called, finalized=False
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-139969025465280 | ProfileMeasureTool deactivated
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-139969025465280 | Thread processing canceled.
2026-01-03 10:13:11 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-139969025465280 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-139969025465280 | Canceling 2 active threads...
2026-01-03 10:13:11 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-139969025465280 | Parallel processing error: Test error
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-139969025465280 | Canceling 2 active threads...
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139969025465280 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-139969025465280 | Adding 1 drillhole trace features to layer
2026-01-03 10:13:11 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-139969025465280 | Failed to create memory layer: Fail
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139969025465280 | create_drillhole_trace_layer called with 0 holes
2026-01-03 10:13:11 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-139969025465280 | No drillhole data provided for trace layer
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139969025465280 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-139969025465280 | Skipping hole H1: insufficient trace points (1)
2026-01-03 10:13:11 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-139969025465280 | Adding 0 drillhole trace features to layer
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139969025465280 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139969025465280 | render() called
2026-01-03 10:13:11 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:144 | Thread-139969025465280 | No valid layers to render
2026-01-03 10:13:11 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:209 | Thread-139969025465280 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 186, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139969025465280 | render() called
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139969025465280 | render() called
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139969025465280 | render() called
2026-01-03 10:13:11 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:144 | Thread-139969025465280 | No valid layers to render
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139969025465280 | render() called
2026-01-03 10:13:11 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139969025465280 | render() called
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-132533448059840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-132533448059840 | Config set: /SecInterp/scale = 500.0
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-132533448059840 | Config set: /SecInterp/vert_exag = 1.0
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-132533448059840 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-132533448059840 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-132533448059840 | Config set: /SecInterp/last_output_dir =
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-132533448059840 | Config set: /SecInterp/dpi = 300
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-132533448059840 | Config set: /SecInterp/preview_width = 800
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-132533448059840 | Config set: /SecInterp/preview_height = 600
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-132533448059840 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-132533448059840 | Config set: /SecInterp/export_quality = 95
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-132533448059840 | Config set: /SecInterp/auto_lod = True
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-132533448059840 | Config set: /SecInterp/max_preview_points = 10000
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:83 | Thread-132533448059840 | Configuration reset to defaults
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-132533448059840 | Config set: /SecInterp/scale = 200.0
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132533448059840 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132533448059840 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132533448059840 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-132533448059840 | Projecting collars from Test Layer with buffer 50.0m
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-132533448059840 | No collars found within buffer area.
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-132533448059840 | Projecting collars from Test Layer with buffer 50.0m
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-132533448059840 | DrillholeService.project_collars END: Found 1 collars.
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-132533448059840 | ✓ Saving profile axes...
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-132533448059840 | ✓ Saving topographic profile...
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-132533448059840 | ✓ Saving interpretation data...
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-132533448059840 | 3D Export features are restricted for this user.
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-132533448059840 | ✓ Saving profile axes...
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-132533448059840 | ✓ Saving topographic profile...
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-132533448059840 | ✓ Saving interpretation data...
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-132533448059840 | ✓ Saving 3D interpretation data...
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-132533448059840 | ✓ Saving profile axes...
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-132533448059840 | ✓ Saving topographic profile...
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-132533448059840 | ✓ Saving geological profile...
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-132533448059840 | ✓ Saving structural profile...
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-132533448059840 | ✓ Saving drillhole data...
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-132533448059840 | ✓ Saving interpretation data...
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-132533448059840 | Access denied for restricted feature: 3D Export
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-132533448059840 | 3D Export features are restricted for this user.
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-132533448059840 | ✓ Saving profile axes...
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-132533448059840 | ✓ Saving topographic profile...
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-132533448059840 | No interpretations provided for export.
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-132533448059840 | ✓ Saving profile axes...
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-132533448059840 | ✓ Saving drillhole data...
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-132533448059840 | ✓ Saving geological profile...
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-132533448059840 | ✓ Saving interpretation data...
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-132533448059840 | ✓ Saving 3D interpretation data...
2026-01-03 10:14:22 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-132533448059840 | Invalid section line layer, skipping 3D export.
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-132533448059840 | ✓ Saving interpretation data...
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-132533448059840 | ✓ Saving structural profile...
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-132533448059840 | ✓ Saving topographic profile...
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-132533448059840 | Generating master profile with interval=10.00
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-132533448059840 | Generated 1 geological segments
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-132533448059840 | Generating master profile with interval=50.00
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-132533448059840 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-132533448059840 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-132533448059840 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-132533448059840 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-132533448059840 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-132533448059840 | Running geometry operation: test
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-132533448059840 | Generated 1 drillhole traces
2026-01-03 10:14:22 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-132533448059840 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-03 10:14:22 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-132533448059840 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-132533448059840 | Generated 1 drillhole traces
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-132533448059840 | Drillhole preview skipped: No Collar ID field selected.
2026-01-03 10:14:22 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-132533448059840 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:14:22 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-132533448059840 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:14:22 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-132533448059840 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:14:22 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-132533448059840 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:14:22 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-132533448059840 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-132533448059840 | Analyzing structures in Structure Layer with buffer 10m
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-132533448059840 | Processed 1 structural measurements from Structure Layer
2026-01-03 10:14:22 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-132533448059840 | Test Title: Test Message
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-132533448059840 | Test Title: Test Message
2026-01-03 10:14:22 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-132533448059840 | Test Title: Test Message
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-132533448059840 | CRITICAL_OP: finalize_polygon | points=2
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-132533448059840 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-03 10:14:22 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-132533448059840 | finalize_polygon() aborted - less than 3 points
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-132533448059840 | CRITICAL_OP: finalize_polygon | points=3
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-132533448059840 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-132533448059840 | finalize_polygon() - emitting polygonFinished signal for 1e781920-5105-412f-a61d-5f88d740739e
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-132533448059840 | Interpretation polygon finalized with 3 vertices, ID: 1e781920-5105-412f-a61d-5f88d740739e
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-132533448059840 | finalize_polygon() completed
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-132533448059840 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-132533448059840 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-132533448059840 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-132533448059840 | ProfileInterpretationTool.reset() completed
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-132533448059840 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-132533448059840 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-132533448059840 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-132533448059840 | ProfileInterpretationTool.reset() completed
2026-01-03 10:14:22 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-132533448059840 | Failed to create locator for layer layer1: mock error
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-132533448059840 | ProfileInterpretationTool.activate() called
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-132533448059840 | ProfileInterpretationTool activated successfully
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-132533448059840 | ProfileInterpretationTool.deactivate() called
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-132533448059840 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-132533448059840 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-132533448059840 | ProfileInterpretationTool.reset() completed
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-132533448059840 | ProfileInterpretationTool deactivated successfully
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-132533448059840 | Point 1 added: 0.00, 0.00
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-132533448059840 | Point 2 added: 100.00, 100.00
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-132533448059840 | Point 1 added: 50.00, 50.00
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-132533448059840 | reset() called, finalized=False
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-132533448059840 | finalize_measurement called with 1 points
2026-01-03 10:14:22 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-132533448059840 | Cannot finalize measurement with less than 2 points
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-132533448059840 | finalize_measurement called with 2 points
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-132533448059840 | Setting finalized = True
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-132533448059840 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-132533448059840 | Switching to pan tool to stop measurement
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-132533448059840 | Pan tool activated - measurement should be frozen
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-132533448059840 | Ignoring click - measurement is finalized
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-132533448059840 | finalize_measurement called with 2 points
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-132533448059840 | Setting finalized = True
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-132533448059840 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-132533448059840 | Switching to pan tool to stop measurement
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-132533448059840 | Pan tool activated - measurement should be frozen
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-132533448059840 | reset() called, finalized=False
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-132533448059840 | reset() called, finalized=False
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-132533448059840 | reset() called, finalized=True
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-132533448059840 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-132533448059840 | reset() called, finalized=False
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-132533448059840 | finalize_measurement called with 2 points
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-132533448059840 | Setting finalized = True
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-132533448059840 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-132533448059840 | Rubber band redrawn with final points only
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-132533448059840 | Switching to pan tool to stop measurement
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-132533448059840 | Pan tool activated - measurement should be frozen
2026-01-03 10:14:22 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-132533448059840 | Failed to create locator for layer layer1: mock error
2026-01-03 10:14:22 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-132533448059840 | Failed to create locator for layer l2: fail
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-132533448059840 | ProfileMeasureTool activated
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-132533448059840 | reset() called, finalized=False
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-132533448059840 | ProfileMeasureTool deactivated
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-132533448059840 | Thread processing canceled.
2026-01-03 10:14:22 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-132533448059840 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-132533448059840 | Canceling 2 active threads...
2026-01-03 10:14:22 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-132533448059840 | Parallel processing error: Test error
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-132533448059840 | Canceling 2 active threads...
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-132533448059840 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-132533448059840 | Adding 1 drillhole trace features to layer
2026-01-03 10:14:22 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-132533448059840 | Failed to create memory layer: Fail
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-132533448059840 | create_drillhole_trace_layer called with 0 holes
2026-01-03 10:14:22 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-132533448059840 | No drillhole data provided for trace layer
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-132533448059840 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-132533448059840 | Skipping hole H1: insufficient trace points (1)
2026-01-03 10:14:22 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-132533448059840 | Adding 0 drillhole trace features to layer
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-132533448059840 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132533448059840 | render() called
2026-01-03 10:14:22 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:144 | Thread-132533448059840 | No valid layers to render
2026-01-03 10:14:22 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:209 | Thread-132533448059840 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 186, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132533448059840 | render() called
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132533448059840 | render() called
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132533448059840 | render() called
2026-01-03 10:14:22 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:144 | Thread-132533448059840 | No valid layers to render
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132533448059840 | render() called
2026-01-03 10:14:22 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132533448059840 | render() called
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:52 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-129405154364352 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129405154364352 | Config set: /SecInterp/scale = 500.0
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129405154364352 | Config set: /SecInterp/vert_exag = 1.0
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129405154364352 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129405154364352 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129405154364352 | Config set: /SecInterp/last_output_dir =
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129405154364352 | Config set: /SecInterp/dpi = 300
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129405154364352 | Config set: /SecInterp/preview_width = 800
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129405154364352 | Config set: /SecInterp/preview_height = 600
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129405154364352 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129405154364352 | Config set: /SecInterp/export_quality = 95
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129405154364352 | Config set: /SecInterp/auto_lod = True
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129405154364352 | Config set: /SecInterp/max_preview_points = 10000
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:83 | Thread-129405154364352 | Configuration reset to defaults
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129405154364352 | Config set: /SecInterp/scale = 200.0
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-129405154364352 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-129405154364352 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-129405154364352 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-129405154364352 | Projecting collars from Test Layer with buffer 50.0m
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-129405154364352 | No collars found within buffer area.
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-129405154364352 | Projecting collars from Test Layer with buffer 50.0m
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-129405154364352 | DrillholeService.project_collars END: Found 1 collars.
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129405154364352 | ✓ Saving profile axes...
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-129405154364352 | ✓ Saving topographic profile...
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129405154364352 | ✓ Saving interpretation data...
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-129405154364352 | 3D Export features are restricted for this user.
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129405154364352 | ✓ Saving profile axes...
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-129405154364352 | ✓ Saving topographic profile...
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129405154364352 | ✓ Saving interpretation data...
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-129405154364352 | ✓ Saving 3D interpretation data...
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129405154364352 | ✓ Saving profile axes...
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-129405154364352 | ✓ Saving topographic profile...
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-129405154364352 | ✓ Saving geological profile...
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-129405154364352 | ✓ Saving structural profile...
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-129405154364352 | ✓ Saving drillhole data...
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129405154364352 | ✓ Saving interpretation data...
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-129405154364352 | Access denied for restricted feature: 3D Export
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-129405154364352 | 3D Export features are restricted for this user.
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129405154364352 | ✓ Saving profile axes...
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-129405154364352 | ✓ Saving topographic profile...
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-129405154364352 | No interpretations provided for export.
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129405154364352 | ✓ Saving profile axes...
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-129405154364352 | ✓ Saving drillhole data...
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-129405154364352 | ✓ Saving geological profile...
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129405154364352 | ✓ Saving interpretation data...
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-129405154364352 | ✓ Saving 3D interpretation data...
2026-01-03 10:14:53 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-129405154364352 | Invalid section line layer, skipping 3D export.
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129405154364352 | ✓ Saving interpretation data...
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-129405154364352 | ✓ Saving structural profile...
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-129405154364352 | ✓ Saving topographic profile...
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-129405154364352 | Generating master profile with interval=10.00
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-129405154364352 | Generated 1 geological segments
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-129405154364352 | Generating master profile with interval=50.00
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-129405154364352 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-129405154364352 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-129405154364352 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-129405154364352 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-129405154364352 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-129405154364352 | Running geometry operation: test
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-129405154364352 | Generated 1 drillhole traces
2026-01-03 10:14:53 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-129405154364352 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-03 10:14:53 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-129405154364352 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-129405154364352 | Generated 1 drillhole traces
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-129405154364352 | Drillhole preview skipped: No Collar ID field selected.
2026-01-03 10:14:53 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-129405154364352 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:14:53 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-129405154364352 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:14:53 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-129405154364352 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:14:53 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-129405154364352 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:14:53 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-129405154364352 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-129405154364352 | Analyzing structures in Structure Layer with buffer 10m
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-129405154364352 | Processed 1 structural measurements from Structure Layer
2026-01-03 10:14:53 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-129405154364352 | Test Title: Test Message
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-129405154364352 | Test Title: Test Message
2026-01-03 10:14:53 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-129405154364352 | Test Title: Test Message
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-129405154364352 | CRITICAL_OP: finalize_polygon | points=2
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-129405154364352 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-03 10:14:53 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-129405154364352 | finalize_polygon() aborted - less than 3 points
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-129405154364352 | CRITICAL_OP: finalize_polygon | points=3
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-129405154364352 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-129405154364352 | finalize_polygon() - emitting polygonFinished signal for bf0a248e-0053-4ee4-afa6-cf1b573cda75
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-129405154364352 | Interpretation polygon finalized with 3 vertices, ID: bf0a248e-0053-4ee4-afa6-cf1b573cda75
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-129405154364352 | finalize_polygon() completed
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-129405154364352 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-129405154364352 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-129405154364352 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-129405154364352 | ProfileInterpretationTool.reset() completed
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-129405154364352 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-129405154364352 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-129405154364352 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-129405154364352 | ProfileInterpretationTool.reset() completed
2026-01-03 10:14:53 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-129405154364352 | Failed to create locator for layer layer1: mock error
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-129405154364352 | ProfileInterpretationTool.activate() called
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-129405154364352 | ProfileInterpretationTool activated successfully
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-129405154364352 | ProfileInterpretationTool.deactivate() called
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-129405154364352 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-129405154364352 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-129405154364352 | ProfileInterpretationTool.reset() completed
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-129405154364352 | ProfileInterpretationTool deactivated successfully
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-129405154364352 | Point 1 added: 0.00, 0.00
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-129405154364352 | Point 2 added: 100.00, 100.00
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-129405154364352 | Point 1 added: 50.00, 50.00
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-129405154364352 | reset() called, finalized=False
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-129405154364352 | finalize_measurement called with 1 points
2026-01-03 10:14:53 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-129405154364352 | Cannot finalize measurement with less than 2 points
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-129405154364352 | finalize_measurement called with 2 points
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-129405154364352 | Setting finalized = True
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-129405154364352 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-129405154364352 | Switching to pan tool to stop measurement
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-129405154364352 | Pan tool activated - measurement should be frozen
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-129405154364352 | Ignoring click - measurement is finalized
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-129405154364352 | finalize_measurement called with 2 points
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-129405154364352 | Setting finalized = True
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-129405154364352 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-129405154364352 | Switching to pan tool to stop measurement
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-129405154364352 | Pan tool activated - measurement should be frozen
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-129405154364352 | reset() called, finalized=False
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-129405154364352 | reset() called, finalized=False
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-129405154364352 | reset() called, finalized=True
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-129405154364352 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-129405154364352 | reset() called, finalized=False
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-129405154364352 | finalize_measurement called with 2 points
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-129405154364352 | Setting finalized = True
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-129405154364352 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-129405154364352 | Rubber band redrawn with final points only
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-129405154364352 | Switching to pan tool to stop measurement
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-129405154364352 | Pan tool activated - measurement should be frozen
2026-01-03 10:14:53 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-129405154364352 | Failed to create locator for layer layer1: mock error
2026-01-03 10:14:53 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-129405154364352 | Failed to create locator for layer l2: fail
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-129405154364352 | ProfileMeasureTool activated
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-129405154364352 | reset() called, finalized=False
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-129405154364352 | ProfileMeasureTool deactivated
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-129405154364352 | Thread processing canceled.
2026-01-03 10:14:53 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-129405154364352 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-129405154364352 | Canceling 2 active threads...
2026-01-03 10:14:53 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-129405154364352 | Parallel processing error: Test error
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-129405154364352 | Canceling 2 active threads...
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129405154364352 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-129405154364352 | Adding 1 drillhole trace features to layer
2026-01-03 10:14:53 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-129405154364352 | Failed to create memory layer: Fail
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129405154364352 | create_drillhole_trace_layer called with 0 holes
2026-01-03 10:14:53 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-129405154364352 | No drillhole data provided for trace layer
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129405154364352 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-129405154364352 | Skipping hole H1: insufficient trace points (1)
2026-01-03 10:14:53 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-129405154364352 | Adding 0 drillhole trace features to layer
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129405154364352 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129405154364352 | render() called
2026-01-03 10:14:53 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:144 | Thread-129405154364352 | No valid layers to render
2026-01-03 10:14:53 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:209 | Thread-129405154364352 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 186, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129405154364352 | render() called
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129405154364352 | render() called
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129405154364352 | render() called
2026-01-03 10:14:53 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:144 | Thread-129405154364352 | No valid layers to render
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129405154364352 | render() called
2026-01-03 10:14:53 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129405154364352 | render() called
2026-01-03 10:15:10 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:10 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:10 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:10 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:10 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:10 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:10 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:10 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:10 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:10 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:10 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:10 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:10 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:10 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:10 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:10 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:10 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:10 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:10 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:10 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:10 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:10 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:10 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:10 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:10 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:10 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:10 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:10 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-136041864260544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-136041864260544 | Config set: /SecInterp/scale = 500.0
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-136041864260544 | Config set: /SecInterp/vert_exag = 1.0
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-136041864260544 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-136041864260544 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-136041864260544 | Config set: /SecInterp/last_output_dir =
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-136041864260544 | Config set: /SecInterp/dpi = 300
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-136041864260544 | Config set: /SecInterp/preview_width = 800
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-136041864260544 | Config set: /SecInterp/preview_height = 600
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-136041864260544 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-136041864260544 | Config set: /SecInterp/export_quality = 95
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-136041864260544 | Config set: /SecInterp/auto_lod = True
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-136041864260544 | Config set: /SecInterp/max_preview_points = 10000
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:83 | Thread-136041864260544 | Configuration reset to defaults
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-136041864260544 | Config set: /SecInterp/scale = 200.0
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-136041864260544 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-136041864260544 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-136041864260544 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-136041864260544 | Projecting collars from Test Layer with buffer 50.0m
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-136041864260544 | No collars found within buffer area.
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-136041864260544 | Projecting collars from Test Layer with buffer 50.0m
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-136041864260544 | DrillholeService.project_collars END: Found 1 collars.
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-136041864260544 | ✓ Saving profile axes...
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-136041864260544 | ✓ Saving topographic profile...
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-136041864260544 | ✓ Saving interpretation data...
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-136041864260544 | 3D Export features are restricted for this user.
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-136041864260544 | ✓ Saving profile axes...
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-136041864260544 | ✓ Saving topographic profile...
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-136041864260544 | ✓ Saving interpretation data...
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-136041864260544 | ✓ Saving 3D interpretation data...
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-136041864260544 | ✓ Saving profile axes...
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-136041864260544 | ✓ Saving topographic profile...
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-136041864260544 | ✓ Saving geological profile...
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-136041864260544 | ✓ Saving structural profile...
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-136041864260544 | ✓ Saving drillhole data...
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-136041864260544 | ✓ Saving interpretation data...
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-136041864260544 | Access denied for restricted feature: 3D Export
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-136041864260544 | 3D Export features are restricted for this user.
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-136041864260544 | ✓ Saving profile axes...
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-136041864260544 | ✓ Saving topographic profile...
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-136041864260544 | No interpretations provided for export.
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-136041864260544 | ✓ Saving profile axes...
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-136041864260544 | ✓ Saving drillhole data...
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-136041864260544 | ✓ Saving geological profile...
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-136041864260544 | ✓ Saving interpretation data...
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-136041864260544 | ✓ Saving 3D interpretation data...
2026-01-03 10:15:11 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-136041864260544 | Invalid section line layer, skipping 3D export.
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-136041864260544 | ✓ Saving interpretation data...
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-136041864260544 | ✓ Saving structural profile...
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-136041864260544 | ✓ Saving topographic profile...
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-136041864260544 | Generating master profile with interval=10.00
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-136041864260544 | Generated 1 geological segments
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-136041864260544 | Generating master profile with interval=50.00
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-136041864260544 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-136041864260544 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-136041864260544 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-136041864260544 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-136041864260544 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-136041864260544 | Running geometry operation: test
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-136041864260544 | Generated 1 drillhole traces
2026-01-03 10:15:11 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-136041864260544 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-03 10:15:11 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-136041864260544 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-136041864260544 | Generated 1 drillhole traces
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-136041864260544 | Drillhole preview skipped: No Collar ID field selected.
2026-01-03 10:15:11 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-136041864260544 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:15:11 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-136041864260544 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:15:11 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-136041864260544 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:15:11 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-136041864260544 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:15:11 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-136041864260544 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-136041864260544 | Analyzing structures in Structure Layer with buffer 10m
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-136041864260544 | Processed 1 structural measurements from Structure Layer
2026-01-03 10:15:11 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-136041864260544 | Test Title: Test Message
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-136041864260544 | Test Title: Test Message
2026-01-03 10:15:11 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-136041864260544 | Test Title: Test Message
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-136041864260544 | CRITICAL_OP: finalize_polygon | points=2
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-136041864260544 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-03 10:15:11 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-136041864260544 | finalize_polygon() aborted - less than 3 points
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-136041864260544 | CRITICAL_OP: finalize_polygon | points=3
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-136041864260544 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-136041864260544 | finalize_polygon() - emitting polygonFinished signal for 535187da-ebc7-4f41-91d7-acccab3b122e
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-136041864260544 | Interpretation polygon finalized with 3 vertices, ID: 535187da-ebc7-4f41-91d7-acccab3b122e
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-136041864260544 | finalize_polygon() completed
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-136041864260544 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-136041864260544 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-136041864260544 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-136041864260544 | ProfileInterpretationTool.reset() completed
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-136041864260544 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-136041864260544 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-136041864260544 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-136041864260544 | ProfileInterpretationTool.reset() completed
2026-01-03 10:15:11 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-136041864260544 | Failed to create locator for layer layer1: mock error
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-136041864260544 | ProfileInterpretationTool.activate() called
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-136041864260544 | ProfileInterpretationTool activated successfully
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-136041864260544 | ProfileInterpretationTool.deactivate() called
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-136041864260544 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-136041864260544 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-136041864260544 | ProfileInterpretationTool.reset() completed
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-136041864260544 | ProfileInterpretationTool deactivated successfully
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-136041864260544 | Point 1 added: 0.00, 0.00
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-136041864260544 | Point 2 added: 100.00, 100.00
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-136041864260544 | Point 1 added: 50.00, 50.00
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-136041864260544 | reset() called, finalized=False
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-136041864260544 | finalize_measurement called with 1 points
2026-01-03 10:15:11 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-136041864260544 | Cannot finalize measurement with less than 2 points
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-136041864260544 | finalize_measurement called with 2 points
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-136041864260544 | Setting finalized = True
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-136041864260544 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-136041864260544 | Switching to pan tool to stop measurement
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-136041864260544 | Pan tool activated - measurement should be frozen
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-136041864260544 | Ignoring click - measurement is finalized
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-136041864260544 | finalize_measurement called with 2 points
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-136041864260544 | Setting finalized = True
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-136041864260544 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-136041864260544 | Switching to pan tool to stop measurement
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-136041864260544 | Pan tool activated - measurement should be frozen
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-136041864260544 | reset() called, finalized=False
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-136041864260544 | reset() called, finalized=False
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-136041864260544 | reset() called, finalized=True
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-136041864260544 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-136041864260544 | reset() called, finalized=False
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-136041864260544 | finalize_measurement called with 2 points
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-136041864260544 | Setting finalized = True
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-136041864260544 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-136041864260544 | Rubber band redrawn with final points only
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-136041864260544 | Switching to pan tool to stop measurement
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-136041864260544 | Pan tool activated - measurement should be frozen
2026-01-03 10:15:11 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-136041864260544 | Failed to create locator for layer layer1: mock error
2026-01-03 10:15:11 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-136041864260544 | Failed to create locator for layer l2: fail
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-136041864260544 | ProfileMeasureTool activated
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-136041864260544 | reset() called, finalized=False
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-136041864260544 | ProfileMeasureTool deactivated
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-136041864260544 | Thread processing canceled.
2026-01-03 10:15:11 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-136041864260544 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-136041864260544 | Canceling 2 active threads...
2026-01-03 10:15:11 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-136041864260544 | Parallel processing error: Test error
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-136041864260544 | Canceling 2 active threads...
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-136041864260544 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-136041864260544 | Adding 1 drillhole trace features to layer
2026-01-03 10:15:11 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-136041864260544 | Failed to create memory layer: Fail
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-136041864260544 | create_drillhole_trace_layer called with 0 holes
2026-01-03 10:15:11 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-136041864260544 | No drillhole data provided for trace layer
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-136041864260544 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-136041864260544 | Skipping hole H1: insufficient trace points (1)
2026-01-03 10:15:11 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-136041864260544 | Adding 0 drillhole trace features to layer
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-136041864260544 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136041864260544 | render() called
2026-01-03 10:15:11 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:144 | Thread-136041864260544 | No valid layers to render
2026-01-03 10:15:11 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:209 | Thread-136041864260544 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 186, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136041864260544 | render() called
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136041864260544 | render() called
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136041864260544 | render() called
2026-01-03 10:15:11 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:144 | Thread-136041864260544 | No valid layers to render
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136041864260544 | render() called
2026-01-03 10:15:11 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136041864260544 | render() called
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-139899351256000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-139899351256000 | Config set: /SecInterp/scale = 500.0
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-139899351256000 | Config set: /SecInterp/vert_exag = 1.0
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-139899351256000 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-139899351256000 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-139899351256000 | Config set: /SecInterp/last_output_dir =
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-139899351256000 | Config set: /SecInterp/dpi = 300
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-139899351256000 | Config set: /SecInterp/preview_width = 800
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-139899351256000 | Config set: /SecInterp/preview_height = 600
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-139899351256000 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-139899351256000 | Config set: /SecInterp/export_quality = 95
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-139899351256000 | Config set: /SecInterp/auto_lod = True
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-139899351256000 | Config set: /SecInterp/max_preview_points = 10000
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:83 | Thread-139899351256000 | Configuration reset to defaults
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-139899351256000 | Config set: /SecInterp/scale = 200.0
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139899351256000 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139899351256000 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139899351256000 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-139899351256000 | Projecting collars from Test Layer with buffer 50.0m
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-139899351256000 | No collars found within buffer area.
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-139899351256000 | Projecting collars from Test Layer with buffer 50.0m
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-139899351256000 | DrillholeService.project_collars END: Found 1 collars.
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-139899351256000 | ✓ Saving profile axes...
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-139899351256000 | ✓ Saving topographic profile...
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-139899351256000 | ✓ Saving interpretation data...
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-139899351256000 | 3D Export features are restricted for this user.
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-139899351256000 | ✓ Saving profile axes...
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-139899351256000 | ✓ Saving topographic profile...
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-139899351256000 | ✓ Saving interpretation data...
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-139899351256000 | ✓ Saving 3D interpretation data...
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-139899351256000 | ✓ Saving profile axes...
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-139899351256000 | ✓ Saving topographic profile...
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-139899351256000 | ✓ Saving geological profile...
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-139899351256000 | ✓ Saving structural profile...
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-139899351256000 | ✓ Saving drillhole data...
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-139899351256000 | ✓ Saving interpretation data...
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-139899351256000 | Access denied for restricted feature: 3D Export
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-139899351256000 | 3D Export features are restricted for this user.
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-139899351256000 | ✓ Saving profile axes...
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-139899351256000 | ✓ Saving topographic profile...
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-139899351256000 | No interpretations provided for export.
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-139899351256000 | ✓ Saving profile axes...
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-139899351256000 | ✓ Saving drillhole data...
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-139899351256000 | ✓ Saving geological profile...
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-139899351256000 | ✓ Saving interpretation data...
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-139899351256000 | ✓ Saving 3D interpretation data...
2026-01-03 10:15:35 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-139899351256000 | Invalid section line layer, skipping 3D export.
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-139899351256000 | ✓ Saving interpretation data...
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-139899351256000 | ✓ Saving structural profile...
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-139899351256000 | ✓ Saving topographic profile...
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-139899351256000 | Generating master profile with interval=10.00
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-139899351256000 | Generated 1 geological segments
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-139899351256000 | Generating master profile with interval=50.00
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-139899351256000 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-139899351256000 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-139899351256000 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-139899351256000 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-139899351256000 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-139899351256000 | Running geometry operation: test
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-139899351256000 | Generated 1 drillhole traces
2026-01-03 10:15:35 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-139899351256000 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-03 10:15:35 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-139899351256000 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-139899351256000 | Generated 1 drillhole traces
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-139899351256000 | Drillhole preview skipped: No Collar ID field selected.
2026-01-03 10:15:35 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-139899351256000 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:15:35 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-139899351256000 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:15:35 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-139899351256000 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:15:35 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-139899351256000 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:15:35 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-139899351256000 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-139899351256000 | Analyzing structures in Structure Layer with buffer 10m
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-139899351256000 | Processed 1 structural measurements from Structure Layer
2026-01-03 10:15:35 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-139899351256000 | Test Title: Test Message
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-139899351256000 | Test Title: Test Message
2026-01-03 10:15:35 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-139899351256000 | Test Title: Test Message
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-139899351256000 | CRITICAL_OP: finalize_polygon | points=2
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-139899351256000 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-03 10:15:35 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-139899351256000 | finalize_polygon() aborted - less than 3 points
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-139899351256000 | CRITICAL_OP: finalize_polygon | points=3
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-139899351256000 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-139899351256000 | finalize_polygon() - emitting polygonFinished signal for 9feb0d27-1d50-4f61-bdde-f672c1672c7a
2026-01-03 10:15:35 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-139899351256000 | Interpretation polygon finalized with 3 vertices, ID: 9feb0d27-1d50-4f61-bdde-f672c1672c7a
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-139899351256000 | finalize_polygon() completed
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-139899351256000 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-139899351256000 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-139899351256000 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-139899351256000 | ProfileInterpretationTool.reset() completed
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-139899351256000 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-139899351256000 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-139899351256000 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-139899351256000 | ProfileInterpretationTool.reset() completed
2026-01-03 10:15:35 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-139899351256000 | Failed to create locator for layer layer1: mock error
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-139899351256000 | ProfileInterpretationTool.activate() called
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-139899351256000 | ProfileInterpretationTool activated successfully
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-139899351256000 | ProfileInterpretationTool.deactivate() called
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-139899351256000 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-139899351256000 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-139899351256000 | ProfileInterpretationTool.reset() completed
2026-01-03 10:15:35 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-139899351256000 | ProfileInterpretationTool deactivated successfully
2026-01-03 10:15:36 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-139899351256000 | Point 1 added: 0.00, 0.00
2026-01-03 10:15:36 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-139899351256000 | Point 2 added: 100.00, 100.00
2026-01-03 10:15:36 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-139899351256000 | Point 1 added: 50.00, 50.00
2026-01-03 10:15:36 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-139899351256000 | reset() called, finalized=False
2026-01-03 10:15:36 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-139899351256000 | finalize_measurement called with 1 points
2026-01-03 10:15:36 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-139899351256000 | Cannot finalize measurement with less than 2 points
2026-01-03 10:15:36 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-139899351256000 | finalize_measurement called with 2 points
2026-01-03 10:15:36 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-139899351256000 | Setting finalized = True
2026-01-03 10:15:36 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-139899351256000 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:15:36 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-139899351256000 | Switching to pan tool to stop measurement
2026-01-03 10:15:36 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-139899351256000 | Pan tool activated - measurement should be frozen
2026-01-03 10:15:36 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-139899351256000 | Ignoring click - measurement is finalized
2026-01-03 10:15:36 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-139899351256000 | finalize_measurement called with 2 points
2026-01-03 10:15:36 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-139899351256000 | Setting finalized = True
2026-01-03 10:15:36 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-139899351256000 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:15:36 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-139899351256000 | Switching to pan tool to stop measurement
2026-01-03 10:15:36 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-139899351256000 | Pan tool activated - measurement should be frozen
2026-01-03 10:15:36 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-139899351256000 | reset() called, finalized=False
2026-01-03 10:15:36 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-139899351256000 | reset() called, finalized=False
2026-01-03 10:15:36 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-139899351256000 | reset() called, finalized=True
2026-01-03 10:15:36 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-139899351256000 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-03 10:15:36 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-139899351256000 | reset() called, finalized=False
2026-01-03 10:15:36 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-139899351256000 | finalize_measurement called with 2 points
2026-01-03 10:15:36 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-139899351256000 | Setting finalized = True
2026-01-03 10:15:36 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-139899351256000 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:15:36 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-139899351256000 | Rubber band redrawn with final points only
2026-01-03 10:15:36 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-139899351256000 | Switching to pan tool to stop measurement
2026-01-03 10:15:36 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-139899351256000 | Pan tool activated - measurement should be frozen
2026-01-03 10:15:36 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-139899351256000 | Failed to create locator for layer layer1: mock error
2026-01-03 10:15:36 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-139899351256000 | Failed to create locator for layer l2: fail
2026-01-03 10:15:36 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-139899351256000 | ProfileMeasureTool activated
2026-01-03 10:15:36 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-139899351256000 | reset() called, finalized=False
2026-01-03 10:15:36 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-139899351256000 | ProfileMeasureTool deactivated
2026-01-03 10:15:36 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-139899351256000 | Thread processing canceled.
2026-01-03 10:15:36 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-139899351256000 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-03 10:15:36 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-139899351256000 | Canceling 2 active threads...
2026-01-03 10:15:36 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-139899351256000 | Parallel processing error: Test error
2026-01-03 10:15:36 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-139899351256000 | Canceling 2 active threads...
2026-01-03 10:15:36 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139899351256000 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:15:36 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-139899351256000 | Adding 1 drillhole trace features to layer
2026-01-03 10:15:36 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-139899351256000 | Failed to create memory layer: Fail
2026-01-03 10:15:36 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139899351256000 | create_drillhole_trace_layer called with 0 holes
2026-01-03 10:15:36 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-139899351256000 | No drillhole data provided for trace layer
2026-01-03 10:15:36 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139899351256000 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:15:36 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-139899351256000 | Skipping hole H1: insufficient trace points (1)
2026-01-03 10:15:36 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-139899351256000 | Adding 0 drillhole trace features to layer
2026-01-03 10:15:36 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139899351256000 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:15:36 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139899351256000 | render() called
2026-01-03 10:15:36 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:144 | Thread-139899351256000 | No valid layers to render
2026-01-03 10:15:36 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:209 | Thread-139899351256000 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 186, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-03 10:15:36 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139899351256000 | render() called
2026-01-03 10:15:36 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139899351256000 | render() called
2026-01-03 10:15:36 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139899351256000 | render() called
2026-01-03 10:15:36 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:144 | Thread-139899351256000 | No valid layers to render
2026-01-03 10:15:36 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139899351256000 | render() called
2026-01-03 10:15:36 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139899351256000 | render() called
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-136513140771776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-136513140771776 | Config set: /SecInterp/scale = 500.0
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-136513140771776 | Config set: /SecInterp/vert_exag = 1.0
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-136513140771776 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-136513140771776 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-136513140771776 | Config set: /SecInterp/last_output_dir =
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-136513140771776 | Config set: /SecInterp/dpi = 300
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-136513140771776 | Config set: /SecInterp/preview_width = 800
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-136513140771776 | Config set: /SecInterp/preview_height = 600
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-136513140771776 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-136513140771776 | Config set: /SecInterp/export_quality = 95
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-136513140771776 | Config set: /SecInterp/auto_lod = True
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-136513140771776 | Config set: /SecInterp/max_preview_points = 10000
2026-01-03 10:15:52 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:83 | Thread-136513140771776 | Configuration reset to defaults
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-136513140771776 | Config set: /SecInterp/scale = 200.0
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-136513140771776 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-136513140771776 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:15:52 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-136513140771776 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:15:52 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-136513140771776 | Projecting collars from Test Layer with buffer 50.0m
2026-01-03 10:15:52 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-136513140771776 | No collars found within buffer area.
2026-01-03 10:15:52 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-136513140771776 | Projecting collars from Test Layer with buffer 50.0m
2026-01-03 10:15:52 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-136513140771776 | DrillholeService.project_collars END: Found 1 collars.
2026-01-03 10:15:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-136513140771776 | ✓ Saving profile axes...
2026-01-03 10:15:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-136513140771776 | ✓ Saving topographic profile...
2026-01-03 10:15:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-136513140771776 | ✓ Saving interpretation data...
2026-01-03 10:15:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-136513140771776 | 3D Export features are restricted for this user.
2026-01-03 10:15:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-136513140771776 | ✓ Saving profile axes...
2026-01-03 10:15:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-136513140771776 | ✓ Saving topographic profile...
2026-01-03 10:15:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-136513140771776 | ✓ Saving interpretation data...
2026-01-03 10:15:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-136513140771776 | ✓ Saving 3D interpretation data...
2026-01-03 10:15:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-136513140771776 | ✓ Saving profile axes...
2026-01-03 10:15:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-136513140771776 | ✓ Saving topographic profile...
2026-01-03 10:15:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-136513140771776 | ✓ Saving geological profile...
2026-01-03 10:15:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-136513140771776 | ✓ Saving structural profile...
2026-01-03 10:15:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-136513140771776 | ✓ Saving drillhole data...
2026-01-03 10:15:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-136513140771776 | ✓ Saving interpretation data...
2026-01-03 10:15:52 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-136513140771776 | Access denied for restricted feature: 3D Export
2026-01-03 10:15:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-136513140771776 | 3D Export features are restricted for this user.
2026-01-03 10:15:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-136513140771776 | ✓ Saving profile axes...
2026-01-03 10:15:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-136513140771776 | ✓ Saving topographic profile...
2026-01-03 10:15:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-136513140771776 | No interpretations provided for export.
2026-01-03 10:15:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-136513140771776 | ✓ Saving profile axes...
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-136513140771776 | ✓ Saving drillhole data...
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-136513140771776 | ✓ Saving geological profile...
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-136513140771776 | ✓ Saving interpretation data...
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-136513140771776 | ✓ Saving 3D interpretation data...
2026-01-03 10:15:53 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-136513140771776 | Invalid section line layer, skipping 3D export.
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-136513140771776 | ✓ Saving interpretation data...
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-136513140771776 | ✓ Saving structural profile...
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-136513140771776 | ✓ Saving topographic profile...
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-136513140771776 | Generating master profile with interval=10.00
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-136513140771776 | Generated 1 geological segments
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-136513140771776 | Generating master profile with interval=50.00
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-136513140771776 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-136513140771776 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-136513140771776 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-136513140771776 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-136513140771776 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-136513140771776 | Running geometry operation: test
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-136513140771776 | Generated 1 drillhole traces
2026-01-03 10:15:53 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-136513140771776 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-03 10:15:53 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-136513140771776 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-136513140771776 | Generated 1 drillhole traces
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-136513140771776 | Drillhole preview skipped: No Collar ID field selected.
2026-01-03 10:15:53 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-136513140771776 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:15:53 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-136513140771776 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:15:53 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-136513140771776 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:15:53 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-136513140771776 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:15:53 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-136513140771776 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-136513140771776 | Analyzing structures in Structure Layer with buffer 10m
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-136513140771776 | Processed 1 structural measurements from Structure Layer
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:522 | Thread-136513140771776 | Loaded 0 interpretations from project
2026-01-03 10:15:53 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-136513140771776 | Test Title: Test Message
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-136513140771776 | Test Title: Test Message
2026-01-03 10:15:53 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-136513140771776 | Test Title: Test Message
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-136513140771776 | CRITICAL_OP: finalize_polygon | points=2
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-136513140771776 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-03 10:15:53 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-136513140771776 | finalize_polygon() aborted - less than 3 points
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-136513140771776 | CRITICAL_OP: finalize_polygon | points=3
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-136513140771776 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-136513140771776 | finalize_polygon() - emitting polygonFinished signal for f4d3d451-6feb-46b4-94e5-e06c4f876f26
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-136513140771776 | Interpretation polygon finalized with 3 vertices, ID: f4d3d451-6feb-46b4-94e5-e06c4f876f26
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-136513140771776 | finalize_polygon() completed
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-136513140771776 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-136513140771776 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-136513140771776 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-136513140771776 | ProfileInterpretationTool.reset() completed
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-136513140771776 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-136513140771776 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-136513140771776 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-136513140771776 | ProfileInterpretationTool.reset() completed
2026-01-03 10:15:53 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-136513140771776 | Failed to create locator for layer layer1: mock error
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-136513140771776 | ProfileInterpretationTool.activate() called
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-136513140771776 | ProfileInterpretationTool activated successfully
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-136513140771776 | ProfileInterpretationTool.deactivate() called
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-136513140771776 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-136513140771776 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-136513140771776 | ProfileInterpretationTool.reset() completed
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-136513140771776 | ProfileInterpretationTool deactivated successfully
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-136513140771776 | Point 1 added: 0.00, 0.00
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-136513140771776 | Point 2 added: 100.00, 100.00
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-136513140771776 | Point 1 added: 50.00, 50.00
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-136513140771776 | reset() called, finalized=False
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-136513140771776 | finalize_measurement called with 1 points
2026-01-03 10:15:53 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-136513140771776 | Cannot finalize measurement with less than 2 points
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-136513140771776 | finalize_measurement called with 2 points
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-136513140771776 | Setting finalized = True
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-136513140771776 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-136513140771776 | Switching to pan tool to stop measurement
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-136513140771776 | Pan tool activated - measurement should be frozen
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-136513140771776 | Ignoring click - measurement is finalized
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-136513140771776 | finalize_measurement called with 2 points
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-136513140771776 | Setting finalized = True
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-136513140771776 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-136513140771776 | Switching to pan tool to stop measurement
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-136513140771776 | Pan tool activated - measurement should be frozen
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-136513140771776 | reset() called, finalized=False
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-136513140771776 | reset() called, finalized=False
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-136513140771776 | reset() called, finalized=True
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-136513140771776 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-136513140771776 | reset() called, finalized=False
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-136513140771776 | finalize_measurement called with 2 points
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-136513140771776 | Setting finalized = True
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-136513140771776 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-136513140771776 | Rubber band redrawn with final points only
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-136513140771776 | Switching to pan tool to stop measurement
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-136513140771776 | Pan tool activated - measurement should be frozen
2026-01-03 10:15:53 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-136513140771776 | Failed to create locator for layer layer1: mock error
2026-01-03 10:15:53 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-136513140771776 | Failed to create locator for layer l2: fail
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-136513140771776 | ProfileMeasureTool activated
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-136513140771776 | reset() called, finalized=False
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-136513140771776 | ProfileMeasureTool deactivated
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-136513140771776 | Thread processing canceled.
2026-01-03 10:15:53 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-136513140771776 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-136513140771776 | Canceling 2 active threads...
2026-01-03 10:15:53 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-136513140771776 | Parallel processing error: Test error
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-136513140771776 | Canceling 2 active threads...
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-136513140771776 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-136513140771776 | Adding 1 drillhole trace features to layer
2026-01-03 10:15:53 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-136513140771776 | Failed to create memory layer: Fail
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-136513140771776 | create_drillhole_trace_layer called with 0 holes
2026-01-03 10:15:53 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-136513140771776 | No drillhole data provided for trace layer
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-136513140771776 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-136513140771776 | Skipping hole H1: insufficient trace points (1)
2026-01-03 10:15:53 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-136513140771776 | Adding 0 drillhole trace features to layer
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-136513140771776 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136513140771776 | render() called
2026-01-03 10:15:53 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:144 | Thread-136513140771776 | No valid layers to render
2026-01-03 10:15:53 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:209 | Thread-136513140771776 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 186, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136513140771776 | render() called
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136513140771776 | render() called
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136513140771776 | render() called
2026-01-03 10:15:53 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:144 | Thread-136513140771776 | No valid layers to render
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136513140771776 | render() called
2026-01-03 10:15:53 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136513140771776 | render() called
2026-01-03 10:16:21 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:21 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-124648270912448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-124648270912448 | Config set: /SecInterp/scale = 500.0
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-124648270912448 | Config set: /SecInterp/vert_exag = 1.0
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-124648270912448 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-124648270912448 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-124648270912448 | Config set: /SecInterp/last_output_dir =
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-124648270912448 | Config set: /SecInterp/dpi = 300
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-124648270912448 | Config set: /SecInterp/preview_width = 800
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-124648270912448 | Config set: /SecInterp/preview_height = 600
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-124648270912448 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-124648270912448 | Config set: /SecInterp/export_quality = 95
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-124648270912448 | Config set: /SecInterp/auto_lod = True
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-124648270912448 | Config set: /SecInterp/max_preview_points = 10000
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:83 | Thread-124648270912448 | Configuration reset to defaults
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-124648270912448 | Config set: /SecInterp/scale = 200.0
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124648270912448 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124648270912448 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124648270912448 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-124648270912448 | Projecting collars from Test Layer with buffer 50.0m
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-124648270912448 | No collars found within buffer area.
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-124648270912448 | Projecting collars from Test Layer with buffer 50.0m
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-124648270912448 | DrillholeService.project_collars END: Found 1 collars.
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-124648270912448 | ✓ Saving profile axes...
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-124648270912448 | ✓ Saving topographic profile...
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-124648270912448 | ✓ Saving interpretation data...
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-124648270912448 | 3D Export features are restricted for this user.
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-124648270912448 | ✓ Saving profile axes...
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-124648270912448 | ✓ Saving topographic profile...
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-124648270912448 | ✓ Saving interpretation data...
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-124648270912448 | ✓ Saving 3D interpretation data...
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-124648270912448 | ✓ Saving profile axes...
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-124648270912448 | ✓ Saving topographic profile...
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-124648270912448 | ✓ Saving geological profile...
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-124648270912448 | ✓ Saving structural profile...
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-124648270912448 | ✓ Saving drillhole data...
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-124648270912448 | ✓ Saving interpretation data...
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-124648270912448 | Access denied for restricted feature: 3D Export
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-124648270912448 | 3D Export features are restricted for this user.
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-124648270912448 | ✓ Saving profile axes...
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-124648270912448 | ✓ Saving topographic profile...
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-124648270912448 | No interpretations provided for export.
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-124648270912448 | ✓ Saving profile axes...
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-124648270912448 | ✓ Saving drillhole data...
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-124648270912448 | ✓ Saving geological profile...
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-124648270912448 | ✓ Saving interpretation data...
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-124648270912448 | ✓ Saving 3D interpretation data...
2026-01-03 10:16:22 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-124648270912448 | Invalid section line layer, skipping 3D export.
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-124648270912448 | ✓ Saving interpretation data...
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-124648270912448 | ✓ Saving structural profile...
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-124648270912448 | ✓ Saving topographic profile...
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-124648270912448 | Generating master profile with interval=10.00
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-124648270912448 | Generated 1 geological segments
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-124648270912448 | Generating master profile with interval=50.00
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-124648270912448 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-124648270912448 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-124648270912448 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-124648270912448 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-124648270912448 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-124648270912448 | Running geometry operation: test
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-124648270912448 | Generated 1 drillhole traces
2026-01-03 10:16:22 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-124648270912448 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-03 10:16:22 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-124648270912448 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-124648270912448 | Generated 1 drillhole traces
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-124648270912448 | Drillhole preview skipped: No Collar ID field selected.
2026-01-03 10:16:22 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-124648270912448 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:16:22 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-124648270912448 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:16:22 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-124648270912448 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:16:22 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-124648270912448 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:16:22 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-124648270912448 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-124648270912448 | Analyzing structures in Structure Layer with buffer 10m
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-124648270912448 | Processed 1 structural measurements from Structure Layer
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:522 | Thread-124648270912448 | Loaded 0 interpretations from project
2026-01-03 10:16:22 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:165 | Thread-124648270912448 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not MagicMock
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:442 | Thread-124648270912448 | Cache cleared by user
2026-01-03 10:16:22 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-124648270912448 | Test Title: Test Message
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-124648270912448 | Test Title: Test Message
2026-01-03 10:16:22 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-124648270912448 | Test Title: Test Message
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-124648270912448 | CRITICAL_OP: finalize_polygon | points=2
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-124648270912448 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-03 10:16:22 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-124648270912448 | finalize_polygon() aborted - less than 3 points
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-124648270912448 | CRITICAL_OP: finalize_polygon | points=3
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-124648270912448 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-124648270912448 | finalize_polygon() - emitting polygonFinished signal for b8896179-1112-4236-818d-5c9601afb458
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-124648270912448 | Interpretation polygon finalized with 3 vertices, ID: b8896179-1112-4236-818d-5c9601afb458
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-124648270912448 | finalize_polygon() completed
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-124648270912448 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-124648270912448 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-124648270912448 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-124648270912448 | ProfileInterpretationTool.reset() completed
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-124648270912448 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-124648270912448 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-124648270912448 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-124648270912448 | ProfileInterpretationTool.reset() completed
2026-01-03 10:16:22 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-124648270912448 | Failed to create locator for layer layer1: mock error
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-124648270912448 | ProfileInterpretationTool.activate() called
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-124648270912448 | ProfileInterpretationTool activated successfully
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-124648270912448 | ProfileInterpretationTool.deactivate() called
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-124648270912448 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-124648270912448 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-124648270912448 | ProfileInterpretationTool.reset() completed
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-124648270912448 | ProfileInterpretationTool deactivated successfully
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-124648270912448 | Point 1 added: 0.00, 0.00
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-124648270912448 | Point 2 added: 100.00, 100.00
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-124648270912448 | Point 1 added: 50.00, 50.00
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-124648270912448 | reset() called, finalized=False
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-124648270912448 | finalize_measurement called with 1 points
2026-01-03 10:16:22 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-124648270912448 | Cannot finalize measurement with less than 2 points
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-124648270912448 | finalize_measurement called with 2 points
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-124648270912448 | Setting finalized = True
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124648270912448 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-124648270912448 | Switching to pan tool to stop measurement
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-124648270912448 | Pan tool activated - measurement should be frozen
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-124648270912448 | Ignoring click - measurement is finalized
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-124648270912448 | finalize_measurement called with 2 points
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-124648270912448 | Setting finalized = True
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124648270912448 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-124648270912448 | Switching to pan tool to stop measurement
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-124648270912448 | Pan tool activated - measurement should be frozen
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-124648270912448 | reset() called, finalized=False
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-124648270912448 | reset() called, finalized=False
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-124648270912448 | reset() called, finalized=True
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-124648270912448 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-124648270912448 | reset() called, finalized=False
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-124648270912448 | finalize_measurement called with 2 points
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-124648270912448 | Setting finalized = True
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124648270912448 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-124648270912448 | Rubber band redrawn with final points only
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-124648270912448 | Switching to pan tool to stop measurement
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-124648270912448 | Pan tool activated - measurement should be frozen
2026-01-03 10:16:22 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-124648270912448 | Failed to create locator for layer layer1: mock error
2026-01-03 10:16:22 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-124648270912448 | Failed to create locator for layer l2: fail
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-124648270912448 | ProfileMeasureTool activated
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-124648270912448 | reset() called, finalized=False
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-124648270912448 | ProfileMeasureTool deactivated
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-124648270912448 | Thread processing canceled.
2026-01-03 10:16:22 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-124648270912448 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-124648270912448 | Canceling 2 active threads...
2026-01-03 10:16:22 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-124648270912448 | Parallel processing error: Test error
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-124648270912448 | Canceling 2 active threads...
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124648270912448 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-124648270912448 | Adding 1 drillhole trace features to layer
2026-01-03 10:16:22 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-124648270912448 | Failed to create memory layer: Fail
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124648270912448 | create_drillhole_trace_layer called with 0 holes
2026-01-03 10:16:22 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-124648270912448 | No drillhole data provided for trace layer
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124648270912448 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-124648270912448 | Skipping hole H1: insufficient trace points (1)
2026-01-03 10:16:22 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-124648270912448 | Adding 0 drillhole trace features to layer
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124648270912448 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124648270912448 | render() called
2026-01-03 10:16:22 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:144 | Thread-124648270912448 | No valid layers to render
2026-01-03 10:16:22 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:209 | Thread-124648270912448 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 186, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124648270912448 | render() called
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124648270912448 | render() called
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124648270912448 | render() called
2026-01-03 10:16:22 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:144 | Thread-124648270912448 | No valid layers to render
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124648270912448 | render() called
2026-01-03 10:16:22 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124648270912448 | render() called
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-123395398683584 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-123395398683584 | Config set: /SecInterp/scale = 500.0
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-123395398683584 | Config set: /SecInterp/vert_exag = 1.0
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-123395398683584 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-123395398683584 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-123395398683584 | Config set: /SecInterp/last_output_dir =
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-123395398683584 | Config set: /SecInterp/dpi = 300
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-123395398683584 | Config set: /SecInterp/preview_width = 800
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-123395398683584 | Config set: /SecInterp/preview_height = 600
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-123395398683584 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-123395398683584 | Config set: /SecInterp/export_quality = 95
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-123395398683584 | Config set: /SecInterp/auto_lod = True
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-123395398683584 | Config set: /SecInterp/max_preview_points = 10000
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:83 | Thread-123395398683584 | Configuration reset to defaults
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-123395398683584 | Config set: /SecInterp/scale = 200.0
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123395398683584 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123395398683584 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123395398683584 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-123395398683584 | Projecting collars from Test Layer with buffer 50.0m
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-123395398683584 | No collars found within buffer area.
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-123395398683584 | Projecting collars from Test Layer with buffer 50.0m
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-123395398683584 | DrillholeService.project_collars END: Found 1 collars.
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-123395398683584 | ✓ Saving profile axes...
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-123395398683584 | ✓ Saving topographic profile...
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-123395398683584 | ✓ Saving interpretation data...
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-123395398683584 | 3D Export features are restricted for this user.
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-123395398683584 | ✓ Saving profile axes...
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-123395398683584 | ✓ Saving topographic profile...
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-123395398683584 | ✓ Saving interpretation data...
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-123395398683584 | ✓ Saving 3D interpretation data...
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-123395398683584 | ✓ Saving profile axes...
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-123395398683584 | ✓ Saving topographic profile...
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-123395398683584 | ✓ Saving geological profile...
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-123395398683584 | ✓ Saving structural profile...
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-123395398683584 | ✓ Saving drillhole data...
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-123395398683584 | ✓ Saving interpretation data...
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-123395398683584 | Access denied for restricted feature: 3D Export
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-123395398683584 | 3D Export features are restricted for this user.
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-123395398683584 | ✓ Saving profile axes...
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-123395398683584 | ✓ Saving topographic profile...
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-123395398683584 | No interpretations provided for export.
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-123395398683584 | ✓ Saving profile axes...
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-123395398683584 | ✓ Saving drillhole data...
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-123395398683584 | ✓ Saving geological profile...
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-123395398683584 | ✓ Saving interpretation data...
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-123395398683584 | ✓ Saving 3D interpretation data...
2026-01-03 10:18:01 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-123395398683584 | Invalid section line layer, skipping 3D export.
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-123395398683584 | ✓ Saving interpretation data...
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-123395398683584 | ✓ Saving structural profile...
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-123395398683584 | ✓ Saving topographic profile...
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-123395398683584 | Generating master profile with interval=10.00
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-123395398683584 | Generated 1 geological segments
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-123395398683584 | Generating master profile with interval=50.00
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-123395398683584 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-123395398683584 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-123395398683584 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-123395398683584 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-123395398683584 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-123395398683584 | Running geometry operation: test
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-123395398683584 | Generated 1 drillhole traces
2026-01-03 10:18:01 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-123395398683584 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-03 10:18:01 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-123395398683584 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-123395398683584 | Generated 1 drillhole traces
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-123395398683584 | Drillhole preview skipped: No Collar ID field selected.
2026-01-03 10:18:01 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-123395398683584 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:18:01 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-123395398683584 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:18:01 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-123395398683584 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:18:01 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-123395398683584 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:18:01 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-123395398683584 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-123395398683584 | Analyzing structures in Structure Layer with buffer 10m
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-123395398683584 | Processed 1 structural measurements from Structure Layer
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:522 | Thread-123395398683584 | Loaded 0 interpretations from project
2026-01-03 10:18:01 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:165 | Thread-123395398683584 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not MagicMock
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:442 | Thread-123395398683584 | Cache cleared by user
2026-01-03 10:18:01 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-123395398683584 | Test Title: Test Message
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-123395398683584 | Test Title: Test Message
2026-01-03 10:18:01 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-123395398683584 | Test Title: Test Message
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-123395398683584 | CRITICAL_OP: finalize_polygon | points=2
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-123395398683584 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-03 10:18:01 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-123395398683584 | finalize_polygon() aborted - less than 3 points
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-123395398683584 | CRITICAL_OP: finalize_polygon | points=3
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-123395398683584 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-123395398683584 | finalize_polygon() - emitting polygonFinished signal for 395f8aac-8a95-4b07-8ecd-4142801f5304
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-123395398683584 | Interpretation polygon finalized with 3 vertices, ID: 395f8aac-8a95-4b07-8ecd-4142801f5304
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-123395398683584 | finalize_polygon() completed
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-123395398683584 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-123395398683584 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-123395398683584 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-123395398683584 | ProfileInterpretationTool.reset() completed
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-123395398683584 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-123395398683584 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-123395398683584 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-123395398683584 | ProfileInterpretationTool.reset() completed
2026-01-03 10:18:01 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-123395398683584 | Failed to create locator for layer layer1: mock error
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-123395398683584 | ProfileInterpretationTool.activate() called
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-123395398683584 | ProfileInterpretationTool activated successfully
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-123395398683584 | ProfileInterpretationTool.deactivate() called
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-123395398683584 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-123395398683584 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-123395398683584 | ProfileInterpretationTool.reset() completed
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-123395398683584 | ProfileInterpretationTool deactivated successfully
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-123395398683584 | Point 1 added: 0.00, 0.00
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-123395398683584 | Point 2 added: 100.00, 100.00
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-123395398683584 | Point 1 added: 50.00, 50.00
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-123395398683584 | reset() called, finalized=False
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-123395398683584 | finalize_measurement called with 1 points
2026-01-03 10:18:01 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-123395398683584 | Cannot finalize measurement with less than 2 points
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-123395398683584 | finalize_measurement called with 2 points
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-123395398683584 | Setting finalized = True
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-123395398683584 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-123395398683584 | Switching to pan tool to stop measurement
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-123395398683584 | Pan tool activated - measurement should be frozen
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-123395398683584 | Ignoring click - measurement is finalized
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-123395398683584 | finalize_measurement called with 2 points
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-123395398683584 | Setting finalized = True
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-123395398683584 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-123395398683584 | Switching to pan tool to stop measurement
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-123395398683584 | Pan tool activated - measurement should be frozen
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-123395398683584 | reset() called, finalized=False
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-123395398683584 | reset() called, finalized=False
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-123395398683584 | reset() called, finalized=True
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-123395398683584 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-123395398683584 | reset() called, finalized=False
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-123395398683584 | finalize_measurement called with 2 points
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-123395398683584 | Setting finalized = True
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-123395398683584 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-123395398683584 | Rubber band redrawn with final points only
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-123395398683584 | Switching to pan tool to stop measurement
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-123395398683584 | Pan tool activated - measurement should be frozen
2026-01-03 10:18:01 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-123395398683584 | Failed to create locator for layer layer1: mock error
2026-01-03 10:18:01 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-123395398683584 | Failed to create locator for layer l2: fail
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-123395398683584 | ProfileMeasureTool activated
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-123395398683584 | reset() called, finalized=False
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-123395398683584 | ProfileMeasureTool deactivated
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-123395398683584 | Thread processing canceled.
2026-01-03 10:18:01 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-123395398683584 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-123395398683584 | Canceling 2 active threads...
2026-01-03 10:18:01 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-123395398683584 | Parallel processing error: Test error
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-123395398683584 | Canceling 2 active threads...
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-123395398683584 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-123395398683584 | Adding 1 drillhole trace features to layer
2026-01-03 10:18:01 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-123395398683584 | Failed to create memory layer: Fail
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-123395398683584 | create_drillhole_trace_layer called with 0 holes
2026-01-03 10:18:01 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-123395398683584 | No drillhole data provided for trace layer
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-123395398683584 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-123395398683584 | Skipping hole H1: insufficient trace points (1)
2026-01-03 10:18:01 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-123395398683584 | Adding 0 drillhole trace features to layer
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-123395398683584 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123395398683584 | render() called
2026-01-03 10:18:01 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:144 | Thread-123395398683584 | No valid layers to render
2026-01-03 10:18:01 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:209 | Thread-123395398683584 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 186, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123395398683584 | render() called
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123395398683584 | render() called
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123395398683584 | render() called
2026-01-03 10:18:01 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:144 | Thread-123395398683584 | No valid layers to render
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123395398683584 | render() called
2026-01-03 10:18:01 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123395398683584 | render() called
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-129224889043904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129224889043904 | Config set: /SecInterp/scale = 500.0
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129224889043904 | Config set: /SecInterp/vert_exag = 1.0
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129224889043904 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129224889043904 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129224889043904 | Config set: /SecInterp/last_output_dir =
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129224889043904 | Config set: /SecInterp/dpi = 300
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129224889043904 | Config set: /SecInterp/preview_width = 800
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129224889043904 | Config set: /SecInterp/preview_height = 600
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129224889043904 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129224889043904 | Config set: /SecInterp/export_quality = 95
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129224889043904 | Config set: /SecInterp/auto_lod = True
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129224889043904 | Config set: /SecInterp/max_preview_points = 10000
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:83 | Thread-129224889043904 | Configuration reset to defaults
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129224889043904 | Config set: /SecInterp/scale = 200.0
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-129224889043904 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-129224889043904 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-129224889043904 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-129224889043904 | Projecting collars from Test Layer with buffer 50.0m
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-129224889043904 | No collars found within buffer area.
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-129224889043904 | Projecting collars from Test Layer with buffer 50.0m
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-129224889043904 | DrillholeService.project_collars END: Found 1 collars.
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129224889043904 | ✓ Saving profile axes...
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-129224889043904 | ✓ Saving topographic profile...
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129224889043904 | ✓ Saving interpretation data...
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-129224889043904 | 3D Export features are restricted for this user.
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129224889043904 | ✓ Saving profile axes...
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-129224889043904 | ✓ Saving topographic profile...
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129224889043904 | ✓ Saving interpretation data...
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-129224889043904 | ✓ Saving 3D interpretation data...
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129224889043904 | ✓ Saving profile axes...
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-129224889043904 | ✓ Saving topographic profile...
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-129224889043904 | ✓ Saving geological profile...
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-129224889043904 | ✓ Saving structural profile...
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-129224889043904 | ✓ Saving drillhole data...
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129224889043904 | ✓ Saving interpretation data...
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-129224889043904 | Access denied for restricted feature: 3D Export
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-129224889043904 | 3D Export features are restricted for this user.
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129224889043904 | ✓ Saving profile axes...
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-129224889043904 | ✓ Saving topographic profile...
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-129224889043904 | No interpretations provided for export.
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129224889043904 | ✓ Saving profile axes...
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-129224889043904 | ✓ Saving drillhole data...
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-129224889043904 | ✓ Saving geological profile...
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129224889043904 | ✓ Saving interpretation data...
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-129224889043904 | ✓ Saving 3D interpretation data...
2026-01-03 10:32:34 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-129224889043904 | Invalid section line layer, skipping 3D export.
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129224889043904 | ✓ Saving interpretation data...
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-129224889043904 | ✓ Saving structural profile...
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-129224889043904 | ✓ Saving topographic profile...
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-129224889043904 | Generating master profile with interval=10.00
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-129224889043904 | Generated 1 geological segments
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-129224889043904 | Generating master profile with interval=50.00
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-129224889043904 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-129224889043904 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-129224889043904 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-129224889043904 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-129224889043904 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-129224889043904 | Running geometry operation: test
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-129224889043904 | Generated 1 drillhole traces
2026-01-03 10:32:34 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-129224889043904 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-03 10:32:34 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-129224889043904 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-129224889043904 | Generated 1 drillhole traces
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-129224889043904 | Drillhole preview skipped: No Collar ID field selected.
2026-01-03 10:32:34 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-129224889043904 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:32:34 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-129224889043904 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:32:34 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-129224889043904 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:32:34 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-129224889043904 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:32:34 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-129224889043904 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-129224889043904 | Analyzing structures in Structure Layer with buffer 10m
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-129224889043904 | Processed 1 structural measurements from Structure Layer
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:522 | Thread-129224889043904 | Loaded 0 interpretations from project
2026-01-03 10:32:34 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:165 | Thread-129224889043904 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not MagicMock
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:442 | Thread-129224889043904 | Cache cleared by user
2026-01-03 10:32:34 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-129224889043904 | Test Title: Test Message
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-129224889043904 | Test Title: Test Message
2026-01-03 10:32:34 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-129224889043904 | Test Title: Test Message
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-129224889043904 | CRITICAL_OP: finalize_polygon | points=2
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-129224889043904 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-03 10:32:34 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-129224889043904 | finalize_polygon() aborted - less than 3 points
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-129224889043904 | CRITICAL_OP: finalize_polygon | points=3
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-129224889043904 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-129224889043904 | finalize_polygon() - emitting polygonFinished signal for d11c316e-18d5-40ca-8e4a-a44c550ee7f4
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-129224889043904 | Interpretation polygon finalized with 3 vertices, ID: d11c316e-18d5-40ca-8e4a-a44c550ee7f4
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-129224889043904 | finalize_polygon() completed
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-129224889043904 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-129224889043904 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-129224889043904 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-129224889043904 | ProfileInterpretationTool.reset() completed
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-129224889043904 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-129224889043904 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-129224889043904 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-129224889043904 | ProfileInterpretationTool.reset() completed
2026-01-03 10:32:34 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-129224889043904 | Failed to create locator for layer layer1: mock error
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-129224889043904 | ProfileInterpretationTool.activate() called
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-129224889043904 | ProfileInterpretationTool activated successfully
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-129224889043904 | ProfileInterpretationTool.deactivate() called
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-129224889043904 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-129224889043904 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-129224889043904 | ProfileInterpretationTool.reset() completed
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-129224889043904 | ProfileInterpretationTool deactivated successfully
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-129224889043904 | Point 1 added: 0.00, 0.00
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-129224889043904 | Point 2 added: 100.00, 100.00
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-129224889043904 | Point 1 added: 50.00, 50.00
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-129224889043904 | reset() called, finalized=False
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-129224889043904 | finalize_measurement called with 1 points
2026-01-03 10:32:34 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-129224889043904 | Cannot finalize measurement with less than 2 points
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-129224889043904 | finalize_measurement called with 2 points
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-129224889043904 | Setting finalized = True
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-129224889043904 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-129224889043904 | Switching to pan tool to stop measurement
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-129224889043904 | Pan tool activated - measurement should be frozen
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-129224889043904 | Ignoring click - measurement is finalized
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-129224889043904 | finalize_measurement called with 2 points
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-129224889043904 | Setting finalized = True
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-129224889043904 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-129224889043904 | Switching to pan tool to stop measurement
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-129224889043904 | Pan tool activated - measurement should be frozen
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-129224889043904 | reset() called, finalized=False
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-129224889043904 | reset() called, finalized=False
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-129224889043904 | reset() called, finalized=True
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-129224889043904 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-129224889043904 | reset() called, finalized=False
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-129224889043904 | finalize_measurement called with 2 points
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-129224889043904 | Setting finalized = True
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-129224889043904 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-129224889043904 | Rubber band redrawn with final points only
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-129224889043904 | Switching to pan tool to stop measurement
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-129224889043904 | Pan tool activated - measurement should be frozen
2026-01-03 10:32:34 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-129224889043904 | Failed to create locator for layer layer1: mock error
2026-01-03 10:32:34 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-129224889043904 | Failed to create locator for layer l2: fail
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-129224889043904 | ProfileMeasureTool activated
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-129224889043904 | reset() called, finalized=False
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-129224889043904 | ProfileMeasureTool deactivated
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-129224889043904 | Thread processing canceled.
2026-01-03 10:32:34 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-129224889043904 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-129224889043904 | Canceling 2 active threads...
2026-01-03 10:32:34 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-129224889043904 | Parallel processing error: Test error
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-129224889043904 | Canceling 2 active threads...
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129224889043904 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-129224889043904 | Adding 1 drillhole trace features to layer
2026-01-03 10:32:34 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-129224889043904 | Failed to create memory layer: Fail
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129224889043904 | create_drillhole_trace_layer called with 0 holes
2026-01-03 10:32:34 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-129224889043904 | No drillhole data provided for trace layer
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129224889043904 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-129224889043904 | Skipping hole H1: insufficient trace points (1)
2026-01-03 10:32:34 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-129224889043904 | Adding 0 drillhole trace features to layer
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129224889043904 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129224889043904 | render() called
2026-01-03 10:32:34 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:144 | Thread-129224889043904 | No valid layers to render
2026-01-03 10:32:34 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:209 | Thread-129224889043904 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 186, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129224889043904 | render() called
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129224889043904 | render() called
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129224889043904 | render() called
2026-01-03 10:32:34 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:144 | Thread-129224889043904 | No valid layers to render
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129224889043904 | render() called
2026-01-03 10:32:34 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129224889043904 | render() called
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-131182295722944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-131182295722944 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:43:17 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-131182295722944 | Adding 1 drillhole trace features to layer
2026-01-03 10:43:17 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-131182295722944 | Failed to create memory layer: Fail
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-131182295722944 | create_drillhole_trace_layer called with 0 holes
2026-01-03 10:43:17 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-131182295722944 | No drillhole data provided for trace layer
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-131182295722944 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-131182295722944 | Skipping hole H1: insufficient trace points (1)
2026-01-03 10:43:17 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-131182295722944 | Adding 0 drillhole trace features to layer
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-131182295722944 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131182295722944 | render() called
2026-01-03 10:43:17 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:144 | Thread-131182295722944 | No valid layers to render
2026-01-03 10:43:17 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:209 | Thread-131182295722944 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 186, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131182295722944 | render() called
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131182295722944 | render() called
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131182295722944 | render() called
2026-01-03 10:43:17 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:144 | Thread-131182295722944 | No valid layers to render
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131182295722944 | render() called
2026-01-03 10:43:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131182295722944 | render() called
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-123956576398272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:43:47 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123956576398272 | render() called
2026-01-03 10:44:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:07 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:07 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:07 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:07 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:07 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:07 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:07 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:07 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:07 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:07 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:07 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:07 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:07 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:07 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:07 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:07 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:07 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:07 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:07 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:07 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:08 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:08 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:08 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:08 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:08 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:08 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-139236200897472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:08 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139236200897472 | render() called
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-129631104756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129631104756672 | Config set: /SecInterp/scale = 500.0
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129631104756672 | Config set: /SecInterp/vert_exag = 1.0
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129631104756672 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129631104756672 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129631104756672 | Config set: /SecInterp/last_output_dir =
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129631104756672 | Config set: /SecInterp/dpi = 300
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129631104756672 | Config set: /SecInterp/preview_width = 800
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129631104756672 | Config set: /SecInterp/preview_height = 600
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129631104756672 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129631104756672 | Config set: /SecInterp/export_quality = 95
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129631104756672 | Config set: /SecInterp/auto_lod = True
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129631104756672 | Config set: /SecInterp/max_preview_points = 10000
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:83 | Thread-129631104756672 | Configuration reset to defaults
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-129631104756672 | Config set: /SecInterp/scale = 200.0
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-129631104756672 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-129631104756672 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-129631104756672 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-129631104756672 | Projecting collars from Test Layer with buffer 50.0m
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-129631104756672 | No collars found within buffer area.
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-129631104756672 | Projecting collars from Test Layer with buffer 50.0m
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-129631104756672 | DrillholeService.project_collars END: Found 1 collars.
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129631104756672 | ✓ Saving profile axes...
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-129631104756672 | ✓ Saving topographic profile...
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129631104756672 | ✓ Saving interpretation data...
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-129631104756672 | 3D Export features are restricted for this user.
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129631104756672 | ✓ Saving profile axes...
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-129631104756672 | ✓ Saving topographic profile...
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129631104756672 | ✓ Saving interpretation data...
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-129631104756672 | ✓ Saving 3D interpretation data...
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129631104756672 | ✓ Saving profile axes...
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-129631104756672 | ✓ Saving topographic profile...
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-129631104756672 | ✓ Saving geological profile...
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-129631104756672 | ✓ Saving structural profile...
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-129631104756672 | ✓ Saving drillhole data...
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129631104756672 | ✓ Saving interpretation data...
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-129631104756672 | Access denied for restricted feature: 3D Export
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-129631104756672 | 3D Export features are restricted for this user.
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129631104756672 | ✓ Saving profile axes...
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-129631104756672 | ✓ Saving topographic profile...
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-129631104756672 | No interpretations provided for export.
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129631104756672 | ✓ Saving profile axes...
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-129631104756672 | ✓ Saving drillhole data...
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-129631104756672 | ✓ Saving geological profile...
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129631104756672 | ✓ Saving interpretation data...
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-129631104756672 | ✓ Saving 3D interpretation data...
2026-01-03 10:44:14 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-129631104756672 | Invalid section line layer, skipping 3D export.
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129631104756672 | ✓ Saving interpretation data...
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-129631104756672 | ✓ Saving structural profile...
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-129631104756672 | ✓ Saving topographic profile...
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-129631104756672 | Generating master profile with interval=10.00
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-129631104756672 | Generated 1 geological segments
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-129631104756672 | Generating master profile with interval=50.00
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-129631104756672 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-129631104756672 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-129631104756672 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-129631104756672 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-129631104756672 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-129631104756672 | Running geometry operation: test
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-129631104756672 | Generated 1 drillhole traces
2026-01-03 10:44:14 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-129631104756672 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-03 10:44:14 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-129631104756672 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-129631104756672 | Generated 1 drillhole traces
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-129631104756672 | Drillhole preview skipped: No Collar ID field selected.
2026-01-03 10:44:14 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-129631104756672 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:44:14 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-129631104756672 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:44:14 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-129631104756672 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:44:14 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-129631104756672 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:44:14 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-129631104756672 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-129631104756672 | Analyzing structures in Structure Layer with buffer 10m
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-129631104756672 | Processed 1 structural measurements from Structure Layer
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:522 | Thread-129631104756672 | Loaded 0 interpretations from project
2026-01-03 10:44:14 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:165 | Thread-129631104756672 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not MagicMock
2026-01-03 10:44:14 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:442 | Thread-129631104756672 | Cache cleared by user
2026-01-03 10:44:14 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129631104756672 | render() called
2026-01-03 10:44:15 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-129631104756672 | Test Title: Test Message
2026-01-03 10:44:15 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-129631104756672 | Test Title: Test Message
2026-01-03 10:44:15 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-129631104756672 | Test Title: Test Message
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-129631104756672 | CRITICAL_OP: finalize_polygon | points=2
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-129631104756672 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-03 10:44:15 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-129631104756672 | finalize_polygon() aborted - less than 3 points
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-129631104756672 | CRITICAL_OP: finalize_polygon | points=3
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-129631104756672 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-129631104756672 | finalize_polygon() - emitting polygonFinished signal for d8ce957a-c0e5-40ac-b4e3-3aa0c9f1405d
2026-01-03 10:44:15 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-129631104756672 | Interpretation polygon finalized with 3 vertices, ID: d8ce957a-c0e5-40ac-b4e3-3aa0c9f1405d
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-129631104756672 | finalize_polygon() completed
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-129631104756672 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-129631104756672 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-129631104756672 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-129631104756672 | ProfileInterpretationTool.reset() completed
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-129631104756672 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-129631104756672 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-129631104756672 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-129631104756672 | ProfileInterpretationTool.reset() completed
2026-01-03 10:44:15 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-129631104756672 | Failed to create locator for layer layer1: mock error
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-129631104756672 | ProfileInterpretationTool.activate() called
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-129631104756672 | ProfileInterpretationTool activated successfully
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-129631104756672 | ProfileInterpretationTool.deactivate() called
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-129631104756672 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-129631104756672 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-129631104756672 | ProfileInterpretationTool.reset() completed
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-129631104756672 | ProfileInterpretationTool deactivated successfully
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-129631104756672 | Point 1 added: 0.00, 0.00
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-129631104756672 | Point 2 added: 100.00, 100.00
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-129631104756672 | Point 1 added: 50.00, 50.00
2026-01-03 10:44:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-129631104756672 | reset() called, finalized=False
2026-01-03 10:44:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-129631104756672 | finalize_measurement called with 1 points
2026-01-03 10:44:15 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-129631104756672 | Cannot finalize measurement with less than 2 points
2026-01-03 10:44:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-129631104756672 | finalize_measurement called with 2 points
2026-01-03 10:44:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-129631104756672 | Setting finalized = True
2026-01-03 10:44:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-129631104756672 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:44:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-129631104756672 | Switching to pan tool to stop measurement
2026-01-03 10:44:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-129631104756672 | Pan tool activated - measurement should be frozen
2026-01-03 10:44:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-129631104756672 | Ignoring click - measurement is finalized
2026-01-03 10:44:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-129631104756672 | finalize_measurement called with 2 points
2026-01-03 10:44:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-129631104756672 | Setting finalized = True
2026-01-03 10:44:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-129631104756672 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:44:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-129631104756672 | Switching to pan tool to stop measurement
2026-01-03 10:44:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-129631104756672 | Pan tool activated - measurement should be frozen
2026-01-03 10:44:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-129631104756672 | reset() called, finalized=False
2026-01-03 10:44:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-129631104756672 | reset() called, finalized=False
2026-01-03 10:44:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-129631104756672 | reset() called, finalized=True
2026-01-03 10:44:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-129631104756672 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-03 10:44:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-129631104756672 | reset() called, finalized=False
2026-01-03 10:44:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-129631104756672 | finalize_measurement called with 2 points
2026-01-03 10:44:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-129631104756672 | Setting finalized = True
2026-01-03 10:44:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-129631104756672 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:44:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-129631104756672 | Rubber band redrawn with final points only
2026-01-03 10:44:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-129631104756672 | Switching to pan tool to stop measurement
2026-01-03 10:44:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-129631104756672 | Pan tool activated - measurement should be frozen
2026-01-03 10:44:15 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-129631104756672 | Failed to create locator for layer layer1: mock error
2026-01-03 10:44:15 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-129631104756672 | Failed to create locator for layer l2: fail
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-129631104756672 | ProfileMeasureTool activated
2026-01-03 10:44:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-129631104756672 | reset() called, finalized=False
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-129631104756672 | ProfileMeasureTool deactivated
2026-01-03 10:44:15 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-129631104756672 | Thread processing canceled.
2026-01-03 10:44:15 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-129631104756672 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-03 10:44:15 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-129631104756672 | Canceling 2 active threads...
2026-01-03 10:44:15 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-129631104756672 | Parallel processing error: Test error
2026-01-03 10:44:15 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-129631104756672 | Canceling 2 active threads...
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129631104756672 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:44:15 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-129631104756672 | Adding 1 drillhole trace features to layer
2026-01-03 10:44:15 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-129631104756672 | Failed to create memory layer: Fail
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129631104756672 | create_drillhole_trace_layer called with 0 holes
2026-01-03 10:44:15 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-129631104756672 | No drillhole data provided for trace layer
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129631104756672 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-129631104756672 | Skipping hole H1: insufficient trace points (1)
2026-01-03 10:44:15 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-129631104756672 | Adding 0 drillhole trace features to layer
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129631104756672 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129631104756672 | render() called
2026-01-03 10:44:15 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-129631104756672 | No valid layers to render
2026-01-03 10:44:15 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-129631104756672 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129631104756672 | render() called
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129631104756672 | render() called
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129631104756672 | render() called
2026-01-03 10:44:15 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-129631104756672 | No valid layers to render
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129631104756672 | render() called
2026-01-03 10:44:15 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129631104756672 | render() called
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-132334681381824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-132334681381824 | Config set: /SecInterp/scale = 500.0
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-132334681381824 | Config set: /SecInterp/vert_exag = 1.0
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-132334681381824 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-132334681381824 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-132334681381824 | Config set: /SecInterp/last_output_dir =
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-132334681381824 | Config set: /SecInterp/dpi = 300
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-132334681381824 | Config set: /SecInterp/preview_width = 800
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-132334681381824 | Config set: /SecInterp/preview_height = 600
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-132334681381824 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-132334681381824 | Config set: /SecInterp/export_quality = 95
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-132334681381824 | Config set: /SecInterp/auto_lod = True
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-132334681381824 | Config set: /SecInterp/max_preview_points = 10000
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:83 | Thread-132334681381824 | Configuration reset to defaults
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-132334681381824 | Config set: /SecInterp/scale = 200.0
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132334681381824 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132334681381824 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132334681381824 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-132334681381824 | Projecting collars from Test Layer with buffer 50.0m
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-132334681381824 | No collars found within buffer area.
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-132334681381824 | Projecting collars from Test Layer with buffer 50.0m
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-132334681381824 | DrillholeService.project_collars END: Found 1 collars.
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-132334681381824 | ✓ Saving profile axes...
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-132334681381824 | ✓ Saving topographic profile...
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-132334681381824 | ✓ Saving interpretation data...
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-132334681381824 | 3D Export features are restricted for this user.
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-132334681381824 | ✓ Saving profile axes...
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-132334681381824 | ✓ Saving topographic profile...
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-132334681381824 | ✓ Saving interpretation data...
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-132334681381824 | ✓ Saving 3D interpretation data...
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-132334681381824 | ✓ Saving profile axes...
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-132334681381824 | ✓ Saving topographic profile...
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-132334681381824 | ✓ Saving geological profile...
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-132334681381824 | ✓ Saving structural profile...
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-132334681381824 | ✓ Saving drillhole data...
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-132334681381824 | ✓ Saving interpretation data...
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-132334681381824 | Access denied for restricted feature: 3D Export
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-132334681381824 | 3D Export features are restricted for this user.
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-132334681381824 | ✓ Saving profile axes...
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-132334681381824 | ✓ Saving topographic profile...
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-132334681381824 | No interpretations provided for export.
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-132334681381824 | ✓ Saving profile axes...
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-132334681381824 | ✓ Saving drillhole data...
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-132334681381824 | ✓ Saving geological profile...
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-132334681381824 | ✓ Saving interpretation data...
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-132334681381824 | ✓ Saving 3D interpretation data...
2026-01-03 10:44:56 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-132334681381824 | Invalid section line layer, skipping 3D export.
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-132334681381824 | ✓ Saving interpretation data...
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-132334681381824 | ✓ Saving structural profile...
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-132334681381824 | ✓ Saving topographic profile...
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-132334681381824 | Generating master profile with interval=10.00
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-132334681381824 | Generated 1 geological segments
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-132334681381824 | Generating master profile with interval=50.00
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-132334681381824 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-132334681381824 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-132334681381824 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-132334681381824 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-132334681381824 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-03 10:44:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-132334681381824 | Running geometry operation: test
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-132334681381824 | Generated 1 drillhole traces
2026-01-03 10:44:56 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-132334681381824 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-03 10:44:56 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-132334681381824 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-132334681381824 | Generated 1 drillhole traces
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-132334681381824 | Drillhole preview skipped: No Collar ID field selected.
2026-01-03 10:44:56 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-132334681381824 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:44:56 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-132334681381824 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:44:56 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-132334681381824 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:44:56 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-132334681381824 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:44:56 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-132334681381824 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-132334681381824 | Analyzing structures in Structure Layer with buffer 10m
2026-01-03 10:44:56 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-132334681381824 | Processed 1 structural measurements from Structure Layer
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:522 | Thread-132334681381824 | Loaded 0 interpretations from project
2026-01-03 10:44:57 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:165 | Thread-132334681381824 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not MagicMock
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:442 | Thread-132334681381824 | Cache cleared by user
2026-01-03 10:44:57 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-132334681381824 | Test Title: Test Message
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-132334681381824 | Test Title: Test Message
2026-01-03 10:44:57 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-132334681381824 | Test Title: Test Message
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-132334681381824 | CRITICAL_OP: finalize_polygon | points=2
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-132334681381824 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-03 10:44:57 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-132334681381824 | finalize_polygon() aborted - less than 3 points
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-132334681381824 | CRITICAL_OP: finalize_polygon | points=3
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-132334681381824 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-132334681381824 | finalize_polygon() - emitting polygonFinished signal for dced17d6-a0c0-42c3-84e8-1458de37c57c
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-132334681381824 | Interpretation polygon finalized with 3 vertices, ID: dced17d6-a0c0-42c3-84e8-1458de37c57c
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-132334681381824 | finalize_polygon() completed
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-132334681381824 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-132334681381824 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-132334681381824 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-132334681381824 | ProfileInterpretationTool.reset() completed
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-132334681381824 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-132334681381824 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-132334681381824 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-132334681381824 | ProfileInterpretationTool.reset() completed
2026-01-03 10:44:57 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-132334681381824 | Failed to create locator for layer layer1: mock error
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-132334681381824 | ProfileInterpretationTool.activate() called
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-132334681381824 | ProfileInterpretationTool activated successfully
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-132334681381824 | ProfileInterpretationTool.deactivate() called
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-132334681381824 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-132334681381824 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-132334681381824 | ProfileInterpretationTool.reset() completed
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-132334681381824 | ProfileInterpretationTool deactivated successfully
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-132334681381824 | Point 1 added: 0.00, 0.00
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-132334681381824 | Point 2 added: 100.00, 100.00
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-132334681381824 | Point 1 added: 50.00, 50.00
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-132334681381824 | reset() called, finalized=False
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-132334681381824 | finalize_measurement called with 1 points
2026-01-03 10:44:57 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-132334681381824 | Cannot finalize measurement with less than 2 points
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-132334681381824 | finalize_measurement called with 2 points
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-132334681381824 | Setting finalized = True
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-132334681381824 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-132334681381824 | Switching to pan tool to stop measurement
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-132334681381824 | Pan tool activated - measurement should be frozen
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-132334681381824 | Ignoring click - measurement is finalized
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-132334681381824 | finalize_measurement called with 2 points
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-132334681381824 | Setting finalized = True
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-132334681381824 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-132334681381824 | Switching to pan tool to stop measurement
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-132334681381824 | Pan tool activated - measurement should be frozen
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-132334681381824 | reset() called, finalized=False
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-132334681381824 | reset() called, finalized=False
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-132334681381824 | reset() called, finalized=True
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-132334681381824 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-132334681381824 | reset() called, finalized=False
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-132334681381824 | finalize_measurement called with 2 points
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-132334681381824 | Setting finalized = True
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-132334681381824 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-132334681381824 | Rubber band redrawn with final points only
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-132334681381824 | Switching to pan tool to stop measurement
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-132334681381824 | Pan tool activated - measurement should be frozen
2026-01-03 10:44:57 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-132334681381824 | Failed to create locator for layer layer1: mock error
2026-01-03 10:44:57 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-132334681381824 | Failed to create locator for layer l2: fail
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-132334681381824 | ProfileMeasureTool activated
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-132334681381824 | reset() called, finalized=False
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-132334681381824 | ProfileMeasureTool deactivated
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-132334681381824 | Thread processing canceled.
2026-01-03 10:44:57 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-132334681381824 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-132334681381824 | Canceling 2 active threads...
2026-01-03 10:44:57 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-132334681381824 | Parallel processing error: Test error
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-132334681381824 | Canceling 2 active threads...
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-132334681381824 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-132334681381824 | Adding 1 drillhole trace features to layer
2026-01-03 10:44:57 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-132334681381824 | Failed to create memory layer: Fail
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-132334681381824 | create_drillhole_trace_layer called with 0 holes
2026-01-03 10:44:57 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-132334681381824 | No drillhole data provided for trace layer
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-132334681381824 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-132334681381824 | Skipping hole H1: insufficient trace points (1)
2026-01-03 10:44:57 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-132334681381824 | Adding 0 drillhole trace features to layer
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-132334681381824 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132334681381824 | render() called
2026-01-03 10:44:57 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-132334681381824 | No valid layers to render
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132334681381824 | render() called
2026-01-03 10:44:57 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-132334681381824 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132334681381824 | render() called
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132334681381824 | render() called
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132334681381824 | render() called
2026-01-03 10:44:57 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-132334681381824 | No valid layers to render
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132334681381824 | render() called
2026-01-03 10:44:57 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132334681381824 | render() called
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-130750995725248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-130750995725248 | Config set: /SecInterp/scale = 500.0
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-130750995725248 | Config set: /SecInterp/vert_exag = 1.0
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-130750995725248 | Config set: /SecInterp/buffer_dist = 100.0
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-130750995725248 | Config set: /SecInterp/dip_scale_factor = 1.0
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-130750995725248 | Config set: /SecInterp/last_output_dir =
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-130750995725248 | Config set: /SecInterp/dpi = 300
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-130750995725248 | Config set: /SecInterp/preview_width = 800
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-130750995725248 | Config set: /SecInterp/preview_height = 600
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-130750995725248 | Config set: /SecInterp/sampling_interval = 10.0
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-130750995725248 | Config set: /SecInterp/export_quality = 95
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-130750995725248 | Config set: /SecInterp/auto_lod = True
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-130750995725248 | Config set: /SecInterp/max_preview_points = 10000
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:83 | Thread-130750995725248 | Configuration reset to defaults
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.config | set:77 | Thread-130750995725248 | Config set: /SecInterp/scale = 200.0
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130750995725248 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130750995725248 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130750995725248 | CacheService initialized (Default TTL: 3600s)
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-130750995725248 | Projecting collars from Test Layer with buffer 50.0m
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-130750995725248 | No collars found within buffer area.
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-130750995725248 | Projecting collars from Test Layer with buffer 50.0m
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-130750995725248 | DrillholeService.project_collars END: Found 1 collars.
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-130750995725248 | ✓ Saving profile axes...
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-130750995725248 | ✓ Saving topographic profile...
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-130750995725248 | ✓ Saving interpretation data...
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-130750995725248 | 3D Export features are restricted for this user.
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-130750995725248 | ✓ Saving profile axes...
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-130750995725248 | ✓ Saving topographic profile...
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-130750995725248 | ✓ Saving interpretation data...
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-130750995725248 | ✓ Saving 3D interpretation data...
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-130750995725248 | ✓ Saving profile axes...
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-130750995725248 | ✓ Saving topographic profile...
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-130750995725248 | ✓ Saving geological profile...
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-130750995725248 | ✓ Saving structural profile...
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-130750995725248 | ✓ Saving drillhole data...
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-130750995725248 | ✓ Saving interpretation data...
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-130750995725248 | Access denied for restricted feature: 3D Export
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-130750995725248 | 3D Export features are restricted for this user.
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-130750995725248 | ✓ Saving profile axes...
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-130750995725248 | ✓ Saving topographic profile...
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-130750995725248 | No interpretations provided for export.
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-130750995725248 | ✓ Saving profile axes...
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-130750995725248 | ✓ Saving drillhole data...
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-130750995725248 | ✓ Saving geological profile...
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-130750995725248 | ✓ Saving interpretation data...
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-130750995725248 | ✓ Saving 3D interpretation data...
2026-01-03 10:54:33 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-130750995725248 | Invalid section line layer, skipping 3D export.
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-130750995725248 | ✓ Saving interpretation data...
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-130750995725248 | ✓ Saving structural profile...
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-130750995725248 | ✓ Saving topographic profile...
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-130750995725248 | Generating master profile with interval=10.00
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-130750995725248 | Generated 1 geological segments
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-130750995725248 | Generating master profile with interval=50.00
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-130750995725248 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-130750995725248 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-130750995725248 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-130750995725248 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-130750995725248 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-130750995725248 | Running geometry operation: test
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-130750995725248 | Generated 1 drillhole traces
2026-01-03 10:54:33 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-130750995725248 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-03 10:54:33 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-130750995725248 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-130750995725248 | Generated 1 drillhole traces
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-130750995725248 | Drillhole preview skipped: No Collar ID field selected.
2026-01-03 10:54:33 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-130750995725248 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:54:33 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-130750995725248 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:54:33 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-130750995725248 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:54:33 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-130750995725248 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 10:54:33 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-130750995725248 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-130750995725248 | Analyzing structures in Structure Layer with buffer 10m
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-130750995725248 | Processed 1 structural measurements from Structure Layer
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:522 | Thread-130750995725248 | Loaded 0 interpretations from project
2026-01-03 10:54:33 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:165 | Thread-130750995725248 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not MagicMock
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:442 | Thread-130750995725248 | Cache cleared by user
2026-01-03 10:54:33 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-130750995725248 | Test Title: Test Message
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-130750995725248 | Test Title: Test Message
2026-01-03 10:54:33 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-130750995725248 | Test Title: Test Message
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-130750995725248 | CRITICAL_OP: finalize_polygon | points=2
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-130750995725248 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-03 10:54:33 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-130750995725248 | finalize_polygon() aborted - less than 3 points
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-130750995725248 | CRITICAL_OP: finalize_polygon | points=3
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-130750995725248 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-130750995725248 | finalize_polygon() - emitting polygonFinished signal for d5d13d1a-2d6c-4df0-a628-ebcd70d83349
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-130750995725248 | Interpretation polygon finalized with 3 vertices, ID: d5d13d1a-2d6c-4df0-a628-ebcd70d83349
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-130750995725248 | finalize_polygon() completed
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-130750995725248 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-130750995725248 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-130750995725248 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-130750995725248 | ProfileInterpretationTool.reset() completed
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-130750995725248 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-130750995725248 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-130750995725248 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-130750995725248 | ProfileInterpretationTool.reset() completed
2026-01-03 10:54:33 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-130750995725248 | Failed to create locator for layer layer1: mock error
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-130750995725248 | ProfileInterpretationTool.activate() called
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-130750995725248 | ProfileInterpretationTool activated successfully
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-130750995725248 | ProfileInterpretationTool.deactivate() called
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-130750995725248 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-130750995725248 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-130750995725248 | ProfileInterpretationTool.reset() completed
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-130750995725248 | ProfileInterpretationTool deactivated successfully
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-130750995725248 | Point 1 added: 0.00, 0.00
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-130750995725248 | Point 2 added: 100.00, 100.00
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-130750995725248 | Point 1 added: 50.00, 50.00
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-130750995725248 | reset() called, finalized=False
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-130750995725248 | finalize_measurement called with 1 points
2026-01-03 10:54:33 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-130750995725248 | Cannot finalize measurement with less than 2 points
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-130750995725248 | finalize_measurement called with 2 points
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-130750995725248 | Setting finalized = True
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-130750995725248 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-130750995725248 | Switching to pan tool to stop measurement
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-130750995725248 | Pan tool activated - measurement should be frozen
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-130750995725248 | Ignoring click - measurement is finalized
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-130750995725248 | finalize_measurement called with 2 points
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-130750995725248 | Setting finalized = True
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-130750995725248 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-130750995725248 | Switching to pan tool to stop measurement
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-130750995725248 | Pan tool activated - measurement should be frozen
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-130750995725248 | reset() called, finalized=False
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-130750995725248 | reset() called, finalized=False
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-130750995725248 | reset() called, finalized=True
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-130750995725248 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-130750995725248 | reset() called, finalized=False
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-130750995725248 | finalize_measurement called with 2 points
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-130750995725248 | Setting finalized = True
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-130750995725248 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-130750995725248 | Rubber band redrawn with final points only
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-130750995725248 | Switching to pan tool to stop measurement
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-130750995725248 | Pan tool activated - measurement should be frozen
2026-01-03 10:54:33 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-130750995725248 | Failed to create locator for layer layer1: mock error
2026-01-03 10:54:33 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-130750995725248 | Failed to create locator for layer l2: fail
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-130750995725248 | ProfileMeasureTool activated
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-130750995725248 | reset() called, finalized=False
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-130750995725248 | ProfileMeasureTool deactivated
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-130750995725248 | Thread processing canceled.
2026-01-03 10:54:33 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-130750995725248 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-130750995725248 | Canceling 2 active threads...
2026-01-03 10:54:33 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-130750995725248 | Parallel processing error: Test error
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-130750995725248 | Canceling 2 active threads...
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-130750995725248 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-130750995725248 | Adding 1 drillhole trace features to layer
2026-01-03 10:54:33 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-130750995725248 | Failed to create memory layer: Fail
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-130750995725248 | create_drillhole_trace_layer called with 0 holes
2026-01-03 10:54:33 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-130750995725248 | No drillhole data provided for trace layer
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-130750995725248 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-130750995725248 | Skipping hole H1: insufficient trace points (1)
2026-01-03 10:54:33 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-130750995725248 | Adding 0 drillhole trace features to layer
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-130750995725248 | create_drillhole_trace_layer called with 1 holes
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130750995725248 | render() called
2026-01-03 10:54:33 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-130750995725248 | No valid layers to render
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130750995725248 | render() called
2026-01-03 10:54:33 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-130750995725248 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130750995725248 | render() called
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130750995725248 | render() called
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130750995725248 | render() called
2026-01-03 10:54:33 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-130750995725248 | No valid layers to render
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130750995725248 | render() called
2026-01-03 10:54:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130750995725248 | render() called
2026-01-03 11:37:29 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:29 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:29 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:29 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:30 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:30 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:30 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:30 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:30 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:30 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:30 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:30 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:30 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:30 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:31 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:31 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:31 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:31 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:31 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:31 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:31 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:31 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:31 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:31 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:31 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:31 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:31 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:31 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:31 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:32 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:37:32 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-135803556826048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:19 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:19 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:19 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:19 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:19 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:19 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:19 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:19 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:19 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:19 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:19 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:19 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:19 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:19 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:19 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:19 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:19 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:19 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:20 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:20 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:20 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:20 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:20 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:20 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:20 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-139716137700288 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-129470474062784 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:47:59 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:164 | Thread-129470474062784 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-131456331180992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:48:07 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:523 | Thread-131456331180992 | Loaded 0 interpretations from project
2026-01-03 11:48:07 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:164 | Thread-131456331180992 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not MagicMock
2026-01-03 11:48:07 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:443 | Thread-131456331180992 | Cache cleared by user
2026-01-03 11:48:07 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-131456331180992 | Test Title: Test Message
2026-01-03 11:48:07 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-131456331180992 | Test Title: Test Message
2026-01-03 11:48:07 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-131456331180992 | Test Title: Test Message
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-131456331180992 | CRITICAL_OP: finalize_polygon | points=2
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-131456331180992 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-03 11:48:08 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-131456331180992 | finalize_polygon() aborted - less than 3 points
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-131456331180992 | CRITICAL_OP: finalize_polygon | points=3
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-131456331180992 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-131456331180992 | finalize_polygon() - emitting polygonFinished signal for 8c42ccc8-bc00-4b9e-acd7-abad8c065711
2026-01-03 11:48:08 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-131456331180992 | Interpretation polygon finalized with 3 vertices, ID: 8c42ccc8-bc00-4b9e-acd7-abad8c065711
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-131456331180992 | finalize_polygon() completed
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-131456331180992 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-131456331180992 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-131456331180992 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-131456331180992 | ProfileInterpretationTool.reset() completed
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-131456331180992 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-131456331180992 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-131456331180992 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-131456331180992 | ProfileInterpretationTool.reset() completed
2026-01-03 11:48:08 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-131456331180992 | Failed to create locator for layer layer1: mock error
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-131456331180992 | ProfileInterpretationTool.activate() called
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-131456331180992 | ProfileInterpretationTool activated successfully
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-131456331180992 | ProfileInterpretationTool.deactivate() called
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-131456331180992 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-131456331180992 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-131456331180992 | ProfileInterpretationTool.reset() completed
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-131456331180992 | ProfileInterpretationTool deactivated successfully
2026-01-03 11:48:08 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:164 | Thread-131456331180992 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-131456331180992 | Point 1 added: 0.00, 0.00
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-131456331180992 | Point 2 added: 100.00, 100.00
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-131456331180992 | Point 1 added: 50.00, 50.00
2026-01-03 11:48:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-131456331180992 | reset() called, finalized=False
2026-01-03 11:48:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-131456331180992 | finalize_measurement called with 1 points
2026-01-03 11:48:08 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-131456331180992 | Cannot finalize measurement with less than 2 points
2026-01-03 11:48:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-131456331180992 | finalize_measurement called with 2 points
2026-01-03 11:48:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-131456331180992 | Setting finalized = True
2026-01-03 11:48:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-131456331180992 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 11:48:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-131456331180992 | Switching to pan tool to stop measurement
2026-01-03 11:48:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-131456331180992 | Pan tool activated - measurement should be frozen
2026-01-03 11:48:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-131456331180992 | Ignoring click - measurement is finalized
2026-01-03 11:48:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-131456331180992 | finalize_measurement called with 2 points
2026-01-03 11:48:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-131456331180992 | Setting finalized = True
2026-01-03 11:48:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-131456331180992 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 11:48:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-131456331180992 | Switching to pan tool to stop measurement
2026-01-03 11:48:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-131456331180992 | Pan tool activated - measurement should be frozen
2026-01-03 11:48:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-131456331180992 | reset() called, finalized=False
2026-01-03 11:48:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-131456331180992 | reset() called, finalized=False
2026-01-03 11:48:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-131456331180992 | reset() called, finalized=True
2026-01-03 11:48:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-131456331180992 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-03 11:48:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-131456331180992 | reset() called, finalized=False
2026-01-03 11:48:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-131456331180992 | finalize_measurement called with 2 points
2026-01-03 11:48:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-131456331180992 | Setting finalized = True
2026-01-03 11:48:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-131456331180992 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 11:48:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-131456331180992 | Rubber band redrawn with final points only
2026-01-03 11:48:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-131456331180992 | Switching to pan tool to stop measurement
2026-01-03 11:48:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-131456331180992 | Pan tool activated - measurement should be frozen
2026-01-03 11:48:08 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-131456331180992 | Failed to create locator for layer layer1: mock error
2026-01-03 11:48:08 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-131456331180992 | Failed to create locator for layer l2: fail
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-131456331180992 | ProfileMeasureTool activated
2026-01-03 11:48:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-131456331180992 | reset() called, finalized=False
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-131456331180992 | ProfileMeasureTool deactivated
2026-01-03 11:48:08 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-131456331180992 | Thread processing canceled.
2026-01-03 11:48:08 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-131456331180992 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-03 11:48:08 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-131456331180992 | Canceling 2 active threads...
2026-01-03 11:48:08 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-131456331180992 | Parallel processing error: Test error
2026-01-03 11:48:08 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-131456331180992 | Canceling 2 active threads...
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-131456331180992 | create_drillhole_trace_layer called with 1 holes
2026-01-03 11:48:08 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-131456331180992 | Adding 1 drillhole trace features to layer
2026-01-03 11:48:08 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-131456331180992 | Failed to create memory layer: Fail
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-131456331180992 | create_drillhole_trace_layer called with 0 holes
2026-01-03 11:48:08 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-131456331180992 | No drillhole data provided for trace layer
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-131456331180992 | create_drillhole_trace_layer called with 1 holes
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-131456331180992 | Skipping hole H1: insufficient trace points (1)
2026-01-03 11:48:08 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-131456331180992 | Adding 0 drillhole trace features to layer
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-131456331180992 | create_drillhole_trace_layer called with 1 holes
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131456331180992 | render() called
2026-01-03 11:48:08 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-131456331180992 | No valid layers to render
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131456331180992 | render() called
2026-01-03 11:48:08 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-131456331180992 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131456331180992 | render() called
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131456331180992 | render() called
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131456331180992 | render() called
2026-01-03 11:48:08 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-131456331180992 | No valid layers to render
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131456331180992 | render() called
2026-01-03 11:48:08 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131456331180992 | render() called
2026-01-03 11:50:26 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:26 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:26 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:26 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:26 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:27 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:27 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:27 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:27 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:27 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:27 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:27 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:27 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:27 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:27 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:28 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:28 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:28 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:28 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:28 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:28 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:28 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:28 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:28 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:28 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:28 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:28 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:28 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:28 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:29 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:50:29 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-136431892466624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-127546741586880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:355 | Thread-127546741586880 | Global setting fallback: buffer_dist = 100.5
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:367 | Thread-127546741586880 | Setting saved to project: test_layer = id_123
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:367 | Thread-127546741586880 | Setting saved to project: test_layer_name = RealName
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:355 | Thread-127546741586880 | Global setting fallback: test_layer = 1.0
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:347 | Thread-127546741586880 | Project setting hit: test_layer_name = RealName
2026-01-03 11:58:49 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:404 | Thread-127546741586880 | Restoring layer: test_layer -> RealName
2026-01-03 12:01:35 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:35 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:35 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:35 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:35 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:35 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:35 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:36 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:36 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:36 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:36 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:36 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:36 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:36 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:36 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:36 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:36 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:36 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:37 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:37 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:37 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:37 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:37 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:37 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:37 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:37 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:37 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:37 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:37 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:37 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:37 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:37 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:37 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:38 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:01:38 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-130442411256768 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:49 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:49 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:49 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:49 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:49 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:49 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:50 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:50 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:50 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:50 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:50 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:50 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:50 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:50 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:50 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:50 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:50 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:51 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:51 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:51 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:51 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:51 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:51 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:51 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:51 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:51 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:51 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:51 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:51 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:51 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:51 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:51 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:51 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:51 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:51 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:51 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:51 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:51 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:52 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:11:52 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-129689101990848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-134030933851072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134030933851072 | Config set: SecInterp/scale = 50000.0
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134030933851072 | Config set: SecInterp/vert_exag = 1.0
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134030933851072 | Config set: SecInterp/buffer_dist = 100.0
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134030933851072 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134030933851072 | Config set: SecInterp/last_output_dir = 
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134030933851072 | Config set: SecInterp/dpi = 300
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134030933851072 | Config set: SecInterp/preview_width = 800
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134030933851072 | Config set: SecInterp/preview_height = 600
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134030933851072 | Config set: SecInterp/sampling_interval = 10.0
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134030933851072 | Config set: SecInterp/export_quality = 95
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134030933851072 | Config set: SecInterp/auto_lod = True
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134030933851072 | Config set: SecInterp/max_preview_points = 10000
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-134030933851072 | Configuration reset to defaults
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134030933851072 | Config set: SecInterp/scale = 200.0
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-134030933851072 | CacheService initialized (Default TTL: 3600s)
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-134030933851072 | CacheService initialized (Default TTL: 3600s)
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-134030933851072 | CacheService initialized (Default TTL: 3600s)
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-134030933851072 | Projecting collars from Test Layer with buffer 50.0m
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-134030933851072 | No collars found within buffer area.
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-134030933851072 | Projecting collars from Test Layer with buffer 50.0m
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-134030933851072 | DrillholeService.project_collars END: Found 1 collars.
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-134030933851072 | ✓ Saving profile axes...
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-134030933851072 | ✓ Saving topographic profile...
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-134030933851072 | ✓ Saving interpretation data...
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-134030933851072 | 3D Export features are restricted for this user.
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-134030933851072 | ✓ Saving profile axes...
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-134030933851072 | ✓ Saving topographic profile...
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-134030933851072 | ✓ Saving interpretation data...
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-134030933851072 | ✓ Saving 3D interpretation data...
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-134030933851072 | ✓ Saving profile axes...
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-134030933851072 | ✓ Saving topographic profile...
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-134030933851072 | ✓ Saving geological profile...
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-134030933851072 | ✓ Saving structural profile...
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-134030933851072 | ✓ Saving drillhole data...
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-134030933851072 | ✓ Saving interpretation data...
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-134030933851072 | Access denied for restricted feature: 3D Export
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-134030933851072 | 3D Export features are restricted for this user.
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-134030933851072 | ✓ Saving profile axes...
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-134030933851072 | ✓ Saving topographic profile...
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-134030933851072 | No interpretations provided for export.
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-134030933851072 | ✓ Saving profile axes...
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-134030933851072 | ✓ Saving drillhole data...
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-134030933851072 | ✓ Saving geological profile...
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-134030933851072 | ✓ Saving interpretation data...
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-134030933851072 | ✓ Saving 3D interpretation data...
2026-01-03 12:19:23 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-134030933851072 | Invalid section line layer, skipping 3D export.
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-134030933851072 | ✓ Saving interpretation data...
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-134030933851072 | ✓ Saving structural profile...
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-134030933851072 | ✓ Saving topographic profile...
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-134030933851072 | Generating master profile with interval=10.00
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-134030933851072 | Generated 1 geological segments
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-134030933851072 | Generating master profile with interval=50.00
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-134030933851072 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-134030933851072 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-134030933851072 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-134030933851072 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-134030933851072 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-03 12:19:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-134030933851072 | Running geometry operation: test
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-134030933851072 | Generated 1 drillhole traces
2026-01-03 12:19:23 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-134030933851072 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-03 12:19:23 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-134030933851072 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-134030933851072 | Generated 1 drillhole traces
2026-01-03 12:19:23 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-134030933851072 | Drillhole preview skipped: No Collar ID field selected.
2026-01-03 12:19:24 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-134030933851072 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 12:19:24 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-134030933851072 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 12:19:24 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-134030933851072 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 12:19:24 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-134030933851072 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 12:19:24 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-134030933851072 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-134030933851072 | Analyzing structures in Structure Layer with buffer 10m
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-134030933851072 | Processed 1 structural measurements from Structure Layer
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:528 | Thread-134030933851072 | Loaded 0 interpretations from project
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134030933851072 | Global setting fallback: section_layer = 1.0
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134030933851072 | Global setting fallback: section_layer_name = 1.0
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-134030933851072 | Failed to restore layer for section_layer
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134030933851072 | Global setting fallback: buffer_dist = 1.0
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134030933851072 | Global setting fallback: dem_layer = 1.0
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134030933851072 | Global setting fallback: dem_layer_name = 1.0
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-134030933851072 | Failed to restore layer for dem_layer
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134030933851072 | Global setting fallback: dem_band = 1.0
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134030933851072 | Global setting fallback: scale = 1.0
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134030933851072 | Global setting fallback: vert_exag = 1.0
2026-01-03 12:19:24 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-134030933851072 | Test Title: Test Message
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-134030933851072 | Test Title: Test Message
2026-01-03 12:19:24 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-134030933851072 | Test Title: Test Message
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-134030933851072 | CRITICAL_OP: finalize_polygon | points=2
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-134030933851072 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-03 12:19:24 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-134030933851072 | finalize_polygon() aborted - less than 3 points
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-134030933851072 | CRITICAL_OP: finalize_polygon | points=3
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-134030933851072 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-134030933851072 | finalize_polygon() - emitting polygonFinished signal for ce9ea8fc-1bc5-409a-b48d-4ce8ec5b1c42
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-134030933851072 | Interpretation polygon finalized with 3 vertices, ID: ce9ea8fc-1bc5-409a-b48d-4ce8ec5b1c42
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-134030933851072 | finalize_polygon() completed
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-134030933851072 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-134030933851072 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-134030933851072 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-134030933851072 | ProfileInterpretationTool.reset() completed
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-134030933851072 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-134030933851072 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-134030933851072 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-134030933851072 | ProfileInterpretationTool.reset() completed
2026-01-03 12:19:24 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-134030933851072 | Failed to create locator for layer layer1: mock error
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-134030933851072 | ProfileInterpretationTool.activate() called
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-134030933851072 | ProfileInterpretationTool activated successfully
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-134030933851072 | ProfileInterpretationTool.deactivate() called
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-134030933851072 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-134030933851072 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-134030933851072 | ProfileInterpretationTool.reset() completed
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-134030933851072 | ProfileInterpretationTool deactivated successfully
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134030933851072 | Global setting fallback: buffer_dist = 100.5
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-134030933851072 | Setting saved to project: test_layer = id_123
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-134030933851072 | Setting saved to project: test_layer_name = RealName
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134030933851072 | Global setting fallback: test_layer = 1.0
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:363 | Thread-134030933851072 | Project setting hit: test_layer_name = RealName
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:420 | Thread-134030933851072 | Restoring layer: test_layer -> RealName
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-134030933851072 | Point 1 added: 0.00, 0.00
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-134030933851072 | Point 2 added: 100.00, 100.00
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-134030933851072 | Point 1 added: 50.00, 50.00
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-134030933851072 | reset() called, finalized=False
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-134030933851072 | finalize_measurement called with 1 points
2026-01-03 12:19:24 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-134030933851072 | Cannot finalize measurement with less than 2 points
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-134030933851072 | finalize_measurement called with 2 points
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-134030933851072 | Setting finalized = True
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-134030933851072 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-134030933851072 | Switching to pan tool to stop measurement
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-134030933851072 | Pan tool activated - measurement should be frozen
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-134030933851072 | Ignoring click - measurement is finalized
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-134030933851072 | finalize_measurement called with 2 points
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-134030933851072 | Setting finalized = True
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-134030933851072 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-134030933851072 | Switching to pan tool to stop measurement
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-134030933851072 | Pan tool activated - measurement should be frozen
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-134030933851072 | reset() called, finalized=False
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-134030933851072 | reset() called, finalized=False
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-134030933851072 | reset() called, finalized=True
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-134030933851072 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-134030933851072 | reset() called, finalized=False
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-134030933851072 | finalize_measurement called with 2 points
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-134030933851072 | Setting finalized = True
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-134030933851072 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-134030933851072 | Rubber band redrawn with final points only
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-134030933851072 | Switching to pan tool to stop measurement
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-134030933851072 | Pan tool activated - measurement should be frozen
2026-01-03 12:19:24 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-134030933851072 | Failed to create locator for layer layer1: mock error
2026-01-03 12:19:24 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-134030933851072 | Failed to create locator for layer l2: fail
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-134030933851072 | ProfileMeasureTool activated
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-134030933851072 | reset() called, finalized=False
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-134030933851072 | ProfileMeasureTool deactivated
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-134030933851072 | Thread processing canceled.
2026-01-03 12:19:24 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-134030933851072 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-134030933851072 | Canceling 2 active threads...
2026-01-03 12:19:24 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-134030933851072 | Parallel processing error: Test error
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-134030933851072 | Canceling 2 active threads...
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-134030933851072 | create_drillhole_trace_layer called with 1 holes
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-134030933851072 | Adding 1 drillhole trace features to layer
2026-01-03 12:19:24 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-134030933851072 | Failed to create memory layer: Fail
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-134030933851072 | create_drillhole_trace_layer called with 0 holes
2026-01-03 12:19:24 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-134030933851072 | No drillhole data provided for trace layer
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-134030933851072 | create_drillhole_trace_layer called with 1 holes
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-134030933851072 | Skipping hole H1: insufficient trace points (1)
2026-01-03 12:19:24 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-134030933851072 | Adding 0 drillhole trace features to layer
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-134030933851072 | create_drillhole_trace_layer called with 1 holes
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134030933851072 | render() called
2026-01-03 12:19:24 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-134030933851072 | No valid layers to render
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134030933851072 | render() called
2026-01-03 12:19:24 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-134030933851072 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134030933851072 | render() called
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134030933851072 | render() called
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134030933851072 | render() called
2026-01-03 12:19:24 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-134030933851072 | No valid layers to render
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134030933851072 | render() called
2026-01-03 12:19:24 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134030933851072 | render() called
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-126398959893440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126398959893440 | Config set: SecInterp/scale = 50000.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126398959893440 | Config set: SecInterp/vert_exag = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126398959893440 | Config set: SecInterp/buffer_dist = 100.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126398959893440 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126398959893440 | Config set: SecInterp/last_output_dir = 
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126398959893440 | Config set: SecInterp/dpi = 300
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126398959893440 | Config set: SecInterp/preview_width = 800
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126398959893440 | Config set: SecInterp/preview_height = 600
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126398959893440 | Config set: SecInterp/sampling_interval = 10.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126398959893440 | Config set: SecInterp/export_quality = 95
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126398959893440 | Config set: SecInterp/auto_lod = True
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126398959893440 | Config set: SecInterp/max_preview_points = 10000
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-126398959893440 | Configuration reset to defaults
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126398959893440 | Config set: SecInterp/scale = 200.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126398959893440 | CacheService initialized (Default TTL: 3600s)
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126398959893440 | CacheService initialized (Default TTL: 3600s)
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126398959893440 | CacheService initialized (Default TTL: 3600s)
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-126398959893440 | Projecting collars from Test Layer with buffer 50.0m
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-126398959893440 | No collars found within buffer area.
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-126398959893440 | Projecting collars from Test Layer with buffer 50.0m
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-126398959893440 | DrillholeService.project_collars END: Found 1 collars.
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-126398959893440 | ✓ Saving profile axes...
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-126398959893440 | ✓ Saving topographic profile...
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-126398959893440 | ✓ Saving interpretation data...
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-126398959893440 | 3D Export features are restricted for this user.
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-126398959893440 | ✓ Saving profile axes...
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-126398959893440 | ✓ Saving topographic profile...
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-126398959893440 | ✓ Saving interpretation data...
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-126398959893440 | ✓ Saving 3D interpretation data...
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-126398959893440 | ✓ Saving profile axes...
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-126398959893440 | ✓ Saving topographic profile...
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-126398959893440 | ✓ Saving geological profile...
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-126398959893440 | ✓ Saving structural profile...
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-126398959893440 | ✓ Saving drillhole data...
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-126398959893440 | ✓ Saving interpretation data...
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-126398959893440 | Access denied for restricted feature: 3D Export
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-126398959893440 | 3D Export features are restricted for this user.
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-126398959893440 | ✓ Saving profile axes...
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-126398959893440 | ✓ Saving topographic profile...
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-126398959893440 | No interpretations provided for export.
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-126398959893440 | ✓ Saving profile axes...
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-126398959893440 | ✓ Saving drillhole data...
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-126398959893440 | ✓ Saving geological profile...
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-126398959893440 | ✓ Saving interpretation data...
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-126398959893440 | ✓ Saving 3D interpretation data...
2026-01-03 12:20:02 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-126398959893440 | Invalid section line layer, skipping 3D export.
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-126398959893440 | ✓ Saving interpretation data...
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-126398959893440 | ✓ Saving structural profile...
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-126398959893440 | ✓ Saving topographic profile...
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-126398959893440 | Generating master profile with interval=10.00
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-126398959893440 | Generated 1 geological segments
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-126398959893440 | Generating master profile with interval=50.00
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-126398959893440 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-126398959893440 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-126398959893440 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-126398959893440 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-126398959893440 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-126398959893440 | Running geometry operation: test
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-126398959893440 | Generated 1 drillhole traces
2026-01-03 12:20:02 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-126398959893440 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-03 12:20:02 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-126398959893440 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-126398959893440 | Generated 1 drillhole traces
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-126398959893440 | Drillhole preview skipped: No Collar ID field selected.
2026-01-03 12:20:02 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-126398959893440 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 12:20:02 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-126398959893440 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 12:20:02 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-126398959893440 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 12:20:02 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-126398959893440 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 12:20:02 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-126398959893440 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-126398959893440 | Analyzing structures in Structure Layer with buffer 10m
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-126398959893440 | Processed 1 structural measurements from Structure Layer
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:528 | Thread-126398959893440 | Loaded 0 interpretations from project
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: section_layer = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: section_layer_name = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-126398959893440 | Failed to restore layer for section_layer
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: buffer_dist = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: dem_layer = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: dem_layer_name = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-126398959893440 | Failed to restore layer for dem_layer
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: dem_band = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: scale = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: vert_exag = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: geol_layer = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: geol_layer_name = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-126398959893440 | Failed to restore layer for geol_layer
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: geol_field = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: struct_layer = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: struct_layer_name = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-126398959893440 | Failed to restore layer for struct_layer
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: struct_dip_field = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: struct_strike_field = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: dip_scale_factor = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: dh_collar_layer = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-126398959893440 | Failed to restore layer for dh_collar_layer
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: dh_collar_id = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: dh_use_geom = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: dh_collar_x = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: dh_collar_y = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: dh_collar_z = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: dh_collar_depth = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: dh_survey_layer = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-126398959893440 | Failed to restore layer for dh_survey_layer
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: dh_survey_id = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: dh_survey_depth = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: dh_survey_azim = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: dh_survey_incl = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: dh_interval_layer = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-126398959893440 | Failed to restore layer for dh_interval_layer
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: dh_interval_id = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: dh_interval_from = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: dh_interval_to = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: dh_interval_lith = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: last_output_dir = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: interp_custom_fields = 1.0
2026-01-03 12:20:02 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:176 | Thread-126398959893440 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: show_topo = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: show_geol = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: show_struct = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: show_drillholes = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: show_interpretations = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: auto_lod = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: adaptive_sampling = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: max_points = 1.0
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-126398959893440 | Settings loaded successfully from Project/Global config
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:448 | Thread-126398959893440 | Cache cleared by user
2026-01-03 12:20:02 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-126398959893440 | Test Title: Test Message
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-126398959893440 | Test Title: Test Message
2026-01-03 12:20:02 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-126398959893440 | Test Title: Test Message
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-126398959893440 | CRITICAL_OP: finalize_polygon | points=2
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-126398959893440 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-03 12:20:02 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-126398959893440 | finalize_polygon() aborted - less than 3 points
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-126398959893440 | CRITICAL_OP: finalize_polygon | points=3
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-126398959893440 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-126398959893440 | finalize_polygon() - emitting polygonFinished signal for e613bf8b-d086-4e25-8f5b-f3858420311a
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-126398959893440 | Interpretation polygon finalized with 3 vertices, ID: e613bf8b-d086-4e25-8f5b-f3858420311a
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-126398959893440 | finalize_polygon() completed
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-126398959893440 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-126398959893440 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-126398959893440 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-126398959893440 | ProfileInterpretationTool.reset() completed
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-126398959893440 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-126398959893440 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-126398959893440 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-126398959893440 | ProfileInterpretationTool.reset() completed
2026-01-03 12:20:02 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-126398959893440 | Failed to create locator for layer layer1: mock error
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-126398959893440 | ProfileInterpretationTool.activate() called
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-126398959893440 | ProfileInterpretationTool activated successfully
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-126398959893440 | ProfileInterpretationTool.deactivate() called
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-126398959893440 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-126398959893440 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-126398959893440 | ProfileInterpretationTool.reset() completed
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-126398959893440 | ProfileInterpretationTool deactivated successfully
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: buffer_dist = 100.5
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-126398959893440 | Setting saved to project: test_layer = id_123
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-126398959893440 | Setting saved to project: test_layer_name = RealName
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126398959893440 | Global setting fallback: test_layer = 1.0
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:363 | Thread-126398959893440 | Project setting hit: test_layer_name = RealName
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:420 | Thread-126398959893440 | Restoring layer: test_layer -> RealName
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-126398959893440 | Point 1 added: 0.00, 0.00
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-126398959893440 | Point 2 added: 100.00, 100.00
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-126398959893440 | Point 1 added: 50.00, 50.00
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-126398959893440 | reset() called, finalized=False
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-126398959893440 | finalize_measurement called with 1 points
2026-01-03 12:20:02 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-126398959893440 | Cannot finalize measurement with less than 2 points
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-126398959893440 | finalize_measurement called with 2 points
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-126398959893440 | Setting finalized = True
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-126398959893440 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-126398959893440 | Switching to pan tool to stop measurement
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-126398959893440 | Pan tool activated - measurement should be frozen
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-126398959893440 | Ignoring click - measurement is finalized
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-126398959893440 | finalize_measurement called with 2 points
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-126398959893440 | Setting finalized = True
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-126398959893440 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-126398959893440 | Switching to pan tool to stop measurement
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-126398959893440 | Pan tool activated - measurement should be frozen
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-126398959893440 | reset() called, finalized=False
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-126398959893440 | reset() called, finalized=False
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-126398959893440 | reset() called, finalized=True
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-126398959893440 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-126398959893440 | reset() called, finalized=False
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-126398959893440 | finalize_measurement called with 2 points
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-126398959893440 | Setting finalized = True
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-126398959893440 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-126398959893440 | Rubber band redrawn with final points only
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-126398959893440 | Switching to pan tool to stop measurement
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-126398959893440 | Pan tool activated - measurement should be frozen
2026-01-03 12:20:02 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-126398959893440 | Failed to create locator for layer layer1: mock error
2026-01-03 12:20:02 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-126398959893440 | Failed to create locator for layer l2: fail
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-126398959893440 | ProfileMeasureTool activated
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-126398959893440 | reset() called, finalized=False
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-126398959893440 | ProfileMeasureTool deactivated
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-126398959893440 | Thread processing canceled.
2026-01-03 12:20:02 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-126398959893440 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-126398959893440 | Canceling 2 active threads...
2026-01-03 12:20:02 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-126398959893440 | Parallel processing error: Test error
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-126398959893440 | Canceling 2 active threads...
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-126398959893440 | create_drillhole_trace_layer called with 1 holes
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-126398959893440 | Adding 1 drillhole trace features to layer
2026-01-03 12:20:02 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-126398959893440 | Failed to create memory layer: Fail
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-126398959893440 | create_drillhole_trace_layer called with 0 holes
2026-01-03 12:20:02 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-126398959893440 | No drillhole data provided for trace layer
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-126398959893440 | create_drillhole_trace_layer called with 1 holes
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-126398959893440 | Skipping hole H1: insufficient trace points (1)
2026-01-03 12:20:02 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-126398959893440 | Adding 0 drillhole trace features to layer
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-126398959893440 | create_drillhole_trace_layer called with 1 holes
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126398959893440 | render() called
2026-01-03 12:20:02 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-126398959893440 | No valid layers to render
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126398959893440 | render() called
2026-01-03 12:20:02 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-126398959893440 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126398959893440 | render() called
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126398959893440 | render() called
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126398959893440 | render() called
2026-01-03 12:20:02 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-126398959893440 | No valid layers to render
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126398959893440 | render() called
2026-01-03 12:20:02 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126398959893440 | render() called
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-138069013089216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138069013089216 | Config set: SecInterp/scale = 50000.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138069013089216 | Config set: SecInterp/vert_exag = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138069013089216 | Config set: SecInterp/buffer_dist = 100.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138069013089216 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138069013089216 | Config set: SecInterp/last_output_dir = 
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138069013089216 | Config set: SecInterp/dpi = 300
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138069013089216 | Config set: SecInterp/preview_width = 800
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138069013089216 | Config set: SecInterp/preview_height = 600
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138069013089216 | Config set: SecInterp/sampling_interval = 10.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138069013089216 | Config set: SecInterp/export_quality = 95
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138069013089216 | Config set: SecInterp/auto_lod = True
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138069013089216 | Config set: SecInterp/max_preview_points = 10000
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-138069013089216 | Configuration reset to defaults
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138069013089216 | Config set: SecInterp/scale = 200.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138069013089216 | CacheService initialized (Default TTL: 3600s)
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138069013089216 | CacheService initialized (Default TTL: 3600s)
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138069013089216 | CacheService initialized (Default TTL: 3600s)
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-138069013089216 | Projecting collars from Test Layer with buffer 50.0m
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-138069013089216 | No collars found within buffer area.
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-138069013089216 | Projecting collars from Test Layer with buffer 50.0m
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-138069013089216 | DrillholeService.project_collars END: Found 1 collars.
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-138069013089216 | ✓ Saving profile axes...
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-138069013089216 | ✓ Saving topographic profile...
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-138069013089216 | ✓ Saving interpretation data...
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-138069013089216 | 3D Export features are restricted for this user.
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-138069013089216 | ✓ Saving profile axes...
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-138069013089216 | ✓ Saving topographic profile...
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-138069013089216 | ✓ Saving interpretation data...
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-138069013089216 | ✓ Saving 3D interpretation data...
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-138069013089216 | ✓ Saving profile axes...
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-138069013089216 | ✓ Saving topographic profile...
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-138069013089216 | ✓ Saving geological profile...
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-138069013089216 | ✓ Saving structural profile...
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-138069013089216 | ✓ Saving drillhole data...
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-138069013089216 | ✓ Saving interpretation data...
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-138069013089216 | Access denied for restricted feature: 3D Export
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-138069013089216 | 3D Export features are restricted for this user.
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-138069013089216 | ✓ Saving profile axes...
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-138069013089216 | ✓ Saving topographic profile...
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-138069013089216 | No interpretations provided for export.
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-138069013089216 | ✓ Saving profile axes...
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-138069013089216 | ✓ Saving drillhole data...
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-138069013089216 | ✓ Saving geological profile...
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-138069013089216 | ✓ Saving interpretation data...
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-138069013089216 | ✓ Saving 3D interpretation data...
2026-01-03 12:20:21 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-138069013089216 | Invalid section line layer, skipping 3D export.
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-138069013089216 | ✓ Saving interpretation data...
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-138069013089216 | ✓ Saving structural profile...
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-138069013089216 | ✓ Saving topographic profile...
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-138069013089216 | Generating master profile with interval=10.00
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-138069013089216 | Generated 1 geological segments
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-138069013089216 | Generating master profile with interval=50.00
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-138069013089216 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-138069013089216 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-138069013089216 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-138069013089216 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-138069013089216 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-138069013089216 | Running geometry operation: test
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-138069013089216 | Generated 1 drillhole traces
2026-01-03 12:20:21 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-138069013089216 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-03 12:20:21 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-138069013089216 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-138069013089216 | Generated 1 drillhole traces
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-138069013089216 | Drillhole preview skipped: No Collar ID field selected.
2026-01-03 12:20:21 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-138069013089216 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 12:20:21 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-138069013089216 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 12:20:21 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-138069013089216 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 12:20:21 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-138069013089216 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 12:20:21 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-138069013089216 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-138069013089216 | Analyzing structures in Structure Layer with buffer 10m
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-138069013089216 | Processed 1 structural measurements from Structure Layer
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:528 | Thread-138069013089216 | Loaded 0 interpretations from project
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: section_layer = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: section_layer_name = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-138069013089216 | Failed to restore layer for section_layer
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: buffer_dist = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: dem_layer = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: dem_layer_name = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-138069013089216 | Failed to restore layer for dem_layer
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: dem_band = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: scale = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: vert_exag = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: geol_layer = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: geol_layer_name = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-138069013089216 | Failed to restore layer for geol_layer
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: geol_field = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: struct_layer = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: struct_layer_name = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-138069013089216 | Failed to restore layer for struct_layer
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: struct_dip_field = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: struct_strike_field = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: dip_scale_factor = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: dh_collar_layer = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-138069013089216 | Failed to restore layer for dh_collar_layer
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: dh_collar_id = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: dh_use_geom = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: dh_collar_x = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: dh_collar_y = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: dh_collar_z = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: dh_collar_depth = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: dh_survey_layer = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-138069013089216 | Failed to restore layer for dh_survey_layer
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: dh_survey_id = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: dh_survey_depth = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: dh_survey_azim = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: dh_survey_incl = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: dh_interval_layer = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-138069013089216 | Failed to restore layer for dh_interval_layer
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: dh_interval_id = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: dh_interval_from = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: dh_interval_to = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: dh_interval_lith = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: last_output_dir = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: interp_custom_fields = 1.0
2026-01-03 12:20:21 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:176 | Thread-138069013089216 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: show_topo = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: show_geol = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: show_struct = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: show_drillholes = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: show_interpretations = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: auto_lod = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: adaptive_sampling = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: max_points = 1.0
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-138069013089216 | Settings loaded successfully from Project/Global config
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:448 | Thread-138069013089216 | Cache cleared by user
2026-01-03 12:20:21 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-138069013089216 | Test Title: Test Message
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-138069013089216 | Test Title: Test Message
2026-01-03 12:20:21 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-138069013089216 | Test Title: Test Message
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-138069013089216 | CRITICAL_OP: finalize_polygon | points=2
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-138069013089216 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-03 12:20:21 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-138069013089216 | finalize_polygon() aborted - less than 3 points
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-138069013089216 | CRITICAL_OP: finalize_polygon | points=3
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-138069013089216 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-138069013089216 | finalize_polygon() - emitting polygonFinished signal for 35ece8a6-93f5-4a9b-9dfb-8d60477c81d5
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-138069013089216 | Interpretation polygon finalized with 3 vertices, ID: 35ece8a6-93f5-4a9b-9dfb-8d60477c81d5
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-138069013089216 | finalize_polygon() completed
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-138069013089216 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-138069013089216 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-138069013089216 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-138069013089216 | ProfileInterpretationTool.reset() completed
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-138069013089216 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-138069013089216 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-138069013089216 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-138069013089216 | ProfileInterpretationTool.reset() completed
2026-01-03 12:20:21 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-138069013089216 | Failed to create locator for layer layer1: mock error
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-138069013089216 | ProfileInterpretationTool.activate() called
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-138069013089216 | ProfileInterpretationTool activated successfully
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-138069013089216 | ProfileInterpretationTool.deactivate() called
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-138069013089216 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-138069013089216 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-138069013089216 | ProfileInterpretationTool.reset() completed
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-138069013089216 | ProfileInterpretationTool deactivated successfully
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: buffer_dist = 100.5
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-138069013089216 | Setting saved to project: test_layer = id_123
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-138069013089216 | Setting saved to project: test_layer_name = RealName
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138069013089216 | Global setting fallback: test_layer = 1.0
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:363 | Thread-138069013089216 | Project setting hit: test_layer_name = RealName
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:420 | Thread-138069013089216 | Restoring layer: test_layer -> RealName
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-138069013089216 | Point 1 added: 0.00, 0.00
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-138069013089216 | Point 2 added: 100.00, 100.00
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-138069013089216 | Point 1 added: 50.00, 50.00
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-138069013089216 | reset() called, finalized=False
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-138069013089216 | finalize_measurement called with 1 points
2026-01-03 12:20:21 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-138069013089216 | Cannot finalize measurement with less than 2 points
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-138069013089216 | finalize_measurement called with 2 points
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-138069013089216 | Setting finalized = True
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-138069013089216 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-138069013089216 | Switching to pan tool to stop measurement
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-138069013089216 | Pan tool activated - measurement should be frozen
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-138069013089216 | Ignoring click - measurement is finalized
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-138069013089216 | finalize_measurement called with 2 points
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-138069013089216 | Setting finalized = True
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-138069013089216 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-138069013089216 | Switching to pan tool to stop measurement
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-138069013089216 | Pan tool activated - measurement should be frozen
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-138069013089216 | reset() called, finalized=False
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-138069013089216 | reset() called, finalized=False
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-138069013089216 | reset() called, finalized=True
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-138069013089216 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-138069013089216 | reset() called, finalized=False
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-138069013089216 | finalize_measurement called with 2 points
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-138069013089216 | Setting finalized = True
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-138069013089216 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-138069013089216 | Rubber band redrawn with final points only
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-138069013089216 | Switching to pan tool to stop measurement
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-138069013089216 | Pan tool activated - measurement should be frozen
2026-01-03 12:20:21 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-138069013089216 | Failed to create locator for layer layer1: mock error
2026-01-03 12:20:21 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-138069013089216 | Failed to create locator for layer l2: fail
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-138069013089216 | ProfileMeasureTool activated
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-138069013089216 | reset() called, finalized=False
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-138069013089216 | ProfileMeasureTool deactivated
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-138069013089216 | Thread processing canceled.
2026-01-03 12:20:21 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-138069013089216 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-138069013089216 | Canceling 2 active threads...
2026-01-03 12:20:21 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-138069013089216 | Parallel processing error: Test error
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-138069013089216 | Canceling 2 active threads...
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138069013089216 | create_drillhole_trace_layer called with 1 holes
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-138069013089216 | Adding 1 drillhole trace features to layer
2026-01-03 12:20:21 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-138069013089216 | Failed to create memory layer: Fail
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138069013089216 | create_drillhole_trace_layer called with 0 holes
2026-01-03 12:20:21 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-138069013089216 | No drillhole data provided for trace layer
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138069013089216 | create_drillhole_trace_layer called with 1 holes
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-138069013089216 | Skipping hole H1: insufficient trace points (1)
2026-01-03 12:20:21 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-138069013089216 | Adding 0 drillhole trace features to layer
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138069013089216 | create_drillhole_trace_layer called with 1 holes
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138069013089216 | render() called
2026-01-03 12:20:21 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-138069013089216 | No valid layers to render
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138069013089216 | render() called
2026-01-03 12:20:21 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-138069013089216 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138069013089216 | render() called
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138069013089216 | render() called
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138069013089216 | render() called
2026-01-03 12:20:21 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-138069013089216 | No valid layers to render
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138069013089216 | render() called
2026-01-03 12:20:21 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138069013089216 | render() called
2026-01-03 12:31:46 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:46 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:46 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:46 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:47 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:47 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:47 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:47 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:47 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:47 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:47 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:47 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:47 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:47 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:47 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:48 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:48 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:48 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:48 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:48 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:48 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:48 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:48 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:48 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:48 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:48 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:48 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:48 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:48 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:48 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:48 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:49 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:31:49 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-135774631070656 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-137212949511104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-137212949511104 | Config set: SecInterp/scale = 50000.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-137212949511104 | Config set: SecInterp/vert_exag = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-137212949511104 | Config set: SecInterp/buffer_dist = 100.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-137212949511104 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-137212949511104 | Config set: SecInterp/last_output_dir = 
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-137212949511104 | Config set: SecInterp/dpi = 300
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-137212949511104 | Config set: SecInterp/preview_width = 800
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-137212949511104 | Config set: SecInterp/preview_height = 600
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-137212949511104 | Config set: SecInterp/sampling_interval = 10.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-137212949511104 | Config set: SecInterp/export_quality = 95
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-137212949511104 | Config set: SecInterp/auto_lod = True
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-137212949511104 | Config set: SecInterp/max_preview_points = 10000
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-137212949511104 | Configuration reset to defaults
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-137212949511104 | Config set: SecInterp/scale = 200.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-137212949511104 | CacheService initialized (Default TTL: 3600s)
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-137212949511104 | CacheService initialized (Default TTL: 3600s)
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-137212949511104 | CacheService initialized (Default TTL: 3600s)
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-137212949511104 | Projecting collars from Test Layer with buffer 50.0m
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-137212949511104 | No collars found within buffer area.
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-137212949511104 | Projecting collars from Test Layer with buffer 50.0m
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-137212949511104 | DrillholeService.project_collars END: Found 1 collars.
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-137212949511104 | ✓ Saving profile axes...
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-137212949511104 | ✓ Saving topographic profile...
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-137212949511104 | ✓ Saving interpretation data...
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-137212949511104 | 3D Export features are restricted for this user.
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-137212949511104 | ✓ Saving profile axes...
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-137212949511104 | ✓ Saving topographic profile...
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-137212949511104 | ✓ Saving interpretation data...
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-137212949511104 | ✓ Saving 3D interpretation data...
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-137212949511104 | ✓ Saving profile axes...
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-137212949511104 | ✓ Saving topographic profile...
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-137212949511104 | ✓ Saving geological profile...
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-137212949511104 | ✓ Saving structural profile...
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-137212949511104 | ✓ Saving drillhole data...
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-137212949511104 | ✓ Saving interpretation data...
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-137212949511104 | Access denied for restricted feature: 3D Export
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-137212949511104 | 3D Export features are restricted for this user.
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-137212949511104 | ✓ Saving profile axes...
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-137212949511104 | ✓ Saving topographic profile...
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-137212949511104 | No interpretations provided for export.
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-137212949511104 | ✓ Saving profile axes...
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-137212949511104 | ✓ Saving drillhole data...
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-137212949511104 | ✓ Saving geological profile...
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-137212949511104 | ✓ Saving interpretation data...
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-137212949511104 | ✓ Saving 3D interpretation data...
2026-01-03 12:35:15 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-137212949511104 | Invalid section line layer, skipping 3D export.
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-137212949511104 | ✓ Saving interpretation data...
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-137212949511104 | ✓ Saving structural profile...
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-137212949511104 | ✓ Saving topographic profile...
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-137212949511104 | Generating master profile with interval=10.00
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-137212949511104 | Generated 1 geological segments
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-137212949511104 | Generating master profile with interval=50.00
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-137212949511104 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-137212949511104 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-137212949511104 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-137212949511104 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-137212949511104 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-137212949511104 | Running geometry operation: test
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-137212949511104 | Generated 1 drillhole traces
2026-01-03 12:35:15 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-137212949511104 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-03 12:35:15 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-137212949511104 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-137212949511104 | Generated 1 drillhole traces
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-137212949511104 | Drillhole preview skipped: No Collar ID field selected.
2026-01-03 12:35:15 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-137212949511104 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 12:35:15 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-137212949511104 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 12:35:15 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-137212949511104 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 12:35:15 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-137212949511104 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-03 12:35:15 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-137212949511104 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-137212949511104 | Analyzing structures in Structure Layer with buffer 10m
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-137212949511104 | Processed 1 structural measurements from Structure Layer
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-137212949511104 | Loaded 0 interpretations from project
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: section_layer = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: section_layer_name = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-137212949511104 | Failed to restore layer for section_layer
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: buffer_dist = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: dem_layer = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: dem_layer_name = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-137212949511104 | Failed to restore layer for dem_layer
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: dem_band = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: scale = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: vert_exag = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: geol_layer = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: geol_layer_name = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-137212949511104 | Failed to restore layer for geol_layer
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: geol_field = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: struct_layer = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: struct_layer_name = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-137212949511104 | Failed to restore layer for struct_layer
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: struct_dip_field = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: struct_strike_field = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: dip_scale_factor = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: dh_collar_layer = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-137212949511104 | Failed to restore layer for dh_collar_layer
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: dh_collar_id = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: dh_use_geom = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: dh_collar_x = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: dh_collar_y = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: dh_collar_z = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: dh_collar_depth = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: dh_survey_layer = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-137212949511104 | Failed to restore layer for dh_survey_layer
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: dh_survey_id = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: dh_survey_depth = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: dh_survey_azim = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: dh_survey_incl = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: dh_interval_layer = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-137212949511104 | Failed to restore layer for dh_interval_layer
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: dh_interval_id = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: dh_interval_from = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: dh_interval_to = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: dh_interval_lith = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: last_output_dir = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: interp_custom_fields = 1.0
2026-01-03 12:35:15 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:176 | Thread-137212949511104 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: show_topo = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: show_geol = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: show_struct = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: show_drillholes = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: show_interpretations = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: auto_lod = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: adaptive_sampling = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: max_points = 1.0
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-137212949511104 | Settings loaded successfully from Project/Global config
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:447 | Thread-137212949511104 | Cache cleared by user
2026-01-03 12:35:15 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-137212949511104 | Test Title: Test Message
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-137212949511104 | Test Title: Test Message
2026-01-03 12:35:15 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-137212949511104 | Test Title: Test Message
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-137212949511104 | CRITICAL_OP: finalize_polygon | points=2
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-137212949511104 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-03 12:35:15 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-137212949511104 | finalize_polygon() aborted - less than 3 points
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-137212949511104 | CRITICAL_OP: finalize_polygon | points=3
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-137212949511104 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-137212949511104 | finalize_polygon() - emitting polygonFinished signal for 63230597-3a14-4ecb-a548-075626ebdbba
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-137212949511104 | Interpretation polygon finalized with 3 vertices, ID: 63230597-3a14-4ecb-a548-075626ebdbba
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-137212949511104 | finalize_polygon() completed
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-137212949511104 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-137212949511104 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-137212949511104 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-137212949511104 | ProfileInterpretationTool.reset() completed
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-137212949511104 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-137212949511104 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-137212949511104 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-137212949511104 | ProfileInterpretationTool.reset() completed
2026-01-03 12:35:15 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-137212949511104 | Failed to create locator for layer layer1: mock error
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-137212949511104 | ProfileInterpretationTool.activate() called
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-137212949511104 | ProfileInterpretationTool activated successfully
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-137212949511104 | ProfileInterpretationTool.deactivate() called
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-137212949511104 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-137212949511104 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-137212949511104 | ProfileInterpretationTool.reset() completed
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-137212949511104 | ProfileInterpretationTool deactivated successfully
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: buffer_dist = 100.5
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-137212949511104 | Setting saved to project: test_layer = id_123
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-137212949511104 | Setting saved to project: test_layer_name = RealName
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-137212949511104 | Global setting fallback: test_layer = 1.0
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:363 | Thread-137212949511104 | Project setting hit: test_layer_name = RealName
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:420 | Thread-137212949511104 | Restoring layer: test_layer -> RealName
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-137212949511104 | Point 1 added: 0.00, 0.00
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-137212949511104 | Point 2 added: 100.00, 100.00
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-137212949511104 | Point 1 added: 50.00, 50.00
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-137212949511104 | reset() called, finalized=False
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-137212949511104 | finalize_measurement called with 1 points
2026-01-03 12:35:15 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-137212949511104 | Cannot finalize measurement with less than 2 points
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-137212949511104 | finalize_measurement called with 2 points
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-137212949511104 | Setting finalized = True
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-137212949511104 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-137212949511104 | Switching to pan tool to stop measurement
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-137212949511104 | Pan tool activated - measurement should be frozen
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-137212949511104 | Ignoring click - measurement is finalized
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-137212949511104 | finalize_measurement called with 2 points
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-137212949511104 | Setting finalized = True
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-137212949511104 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-137212949511104 | Switching to pan tool to stop measurement
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-137212949511104 | Pan tool activated - measurement should be frozen
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-137212949511104 | reset() called, finalized=False
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-137212949511104 | reset() called, finalized=False
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-137212949511104 | reset() called, finalized=True
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-137212949511104 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-137212949511104 | reset() called, finalized=False
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-137212949511104 | finalize_measurement called with 2 points
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-137212949511104 | Setting finalized = True
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-137212949511104 | Measurement finalized: 2 points, 100.00m total distance
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-137212949511104 | Rubber band redrawn with final points only
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-137212949511104 | Switching to pan tool to stop measurement
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-137212949511104 | Pan tool activated - measurement should be frozen
2026-01-03 12:35:15 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-137212949511104 | Failed to create locator for layer layer1: mock error
2026-01-03 12:35:15 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-137212949511104 | Failed to create locator for layer l2: fail
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-137212949511104 | ProfileMeasureTool activated
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-137212949511104 | reset() called, finalized=False
2026-01-03 12:35:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-137212949511104 | ProfileMeasureTool deactivated
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-137212949511104 | Thread processing canceled.
2026-01-03 12:35:15 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-137212949511104 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-137212949511104 | Canceling 2 active threads...
2026-01-03 12:35:15 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-137212949511104 | Parallel processing error: Test error
2026-01-03 12:35:15 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-137212949511104 | Canceling 2 active threads...
2026-01-03 12:35:16 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-137212949511104 | create_drillhole_trace_layer called with 1 holes
2026-01-03 12:35:16 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-137212949511104 | Adding 1 drillhole trace features to layer
2026-01-03 12:35:16 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-137212949511104 | Failed to create memory layer: Fail
2026-01-03 12:35:16 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-137212949511104 | create_drillhole_trace_layer called with 0 holes
2026-01-03 12:35:16 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-137212949511104 | No drillhole data provided for trace layer
2026-01-03 12:35:16 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-137212949511104 | create_drillhole_trace_layer called with 1 holes
2026-01-03 12:35:16 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-137212949511104 | Skipping hole H1: insufficient trace points (1)
2026-01-03 12:35:16 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-137212949511104 | Adding 0 drillhole trace features to layer
2026-01-03 12:35:16 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-137212949511104 | create_drillhole_trace_layer called with 1 holes
2026-01-03 12:35:16 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137212949511104 | render() called
2026-01-03 12:35:16 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-137212949511104 | No valid layers to render
2026-01-03 12:35:16 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137212949511104 | render() called
2026-01-03 12:35:16 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-137212949511104 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-03 12:35:16 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137212949511104 | render() called
2026-01-03 12:35:16 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137212949511104 | render() called
2026-01-03 12:35:16 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137212949511104 | render() called
2026-01-03 12:35:16 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-137212949511104 | No valid layers to render
2026-01-03 12:35:16 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137212949511104 | render() called
2026-01-03 12:35:16 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137212949511104 | render() called
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-129586511076224 | File logging initialized: /app/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129586511076224 | Config set: SecInterp/scale = 50000.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129586511076224 | Config set: SecInterp/vert_exag = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129586511076224 | Config set: SecInterp/buffer_dist = 100.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129586511076224 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129586511076224 | Config set: SecInterp/last_output_dir = 
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129586511076224 | Config set: SecInterp/dpi = 300
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129586511076224 | Config set: SecInterp/preview_width = 800
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129586511076224 | Config set: SecInterp/preview_height = 600
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129586511076224 | Config set: SecInterp/sampling_interval = 10.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129586511076224 | Config set: SecInterp/export_quality = 95
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129586511076224 | Config set: SecInterp/auto_lod = True
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129586511076224 | Config set: SecInterp/max_preview_points = 10000
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-129586511076224 | Configuration reset to defaults
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129586511076224 | Config set: SecInterp/scale = 200.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-129586511076224 | CacheService initialized (Default TTL: 3600s)
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-129586511076224 | CacheService initialized (Default TTL: 3600s)
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-129586511076224 | CacheService initialized (Default TTL: 3600s)
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-129586511076224 | Projecting collars from Test Layer with buffer 50.0m
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-129586511076224 | No collars found within buffer area.
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-129586511076224 | Projecting collars from Test Layer with buffer 50.0m
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-129586511076224 | DrillholeService.project_collars END: Found 1 collars.
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129586511076224 | ✓ Saving profile axes...
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-129586511076224 | ✓ Saving topographic profile...
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129586511076224 | ✓ Saving interpretation data...
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-129586511076224 | 3D Export features are restricted for this user.
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129586511076224 | ✓ Saving profile axes...
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-129586511076224 | ✓ Saving topographic profile...
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129586511076224 | ✓ Saving interpretation data...
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-129586511076224 | ✓ Saving 3D interpretation data...
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129586511076224 | ✓ Saving profile axes...
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-129586511076224 | ✓ Saving topographic profile...
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-129586511076224 | ✓ Saving geological profile...
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-129586511076224 | ✓ Saving structural profile...
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-129586511076224 | ✓ Saving drillhole data...
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129586511076224 | ✓ Saving interpretation data...
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-129586511076224 | Access denied for restricted feature: 3D Export
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-129586511076224 | 3D Export features are restricted for this user.
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129586511076224 | ✓ Saving profile axes...
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-129586511076224 | ✓ Saving topographic profile...
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-129586511076224 | No interpretations provided for export.
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129586511076224 | ✓ Saving profile axes...
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-129586511076224 | ✓ Saving drillhole data...
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-129586511076224 | ✓ Saving geological profile...
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129586511076224 | ✓ Saving interpretation data...
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-129586511076224 | ✓ Saving 3D interpretation data...
2026-01-04 04:01:06 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-129586511076224 | Invalid section line layer, skipping 3D export.
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129586511076224 | ✓ Saving interpretation data...
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-129586511076224 | ✓ Saving structural profile...
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-129586511076224 | ✓ Saving topographic profile...
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-129586511076224 | Generating master profile with interval=10.00
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-129586511076224 | Generated 1 geological segments
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-129586511076224 | Generating master profile with interval=50.00
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-129586511076224 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-129586511076224 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-129586511076224 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-129586511076224 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-129586511076224 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-129586511076224 | Running geometry operation: test
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-129586511076224 | Generated 1 drillhole traces
2026-01-04 04:01:06 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-129586511076224 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/app/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-04 04:01:06 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-129586511076224 | Traceback (most recent call last):
  File "/app/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/app/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-129586511076224 | Generated 1 drillhole traces
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-129586511076224 | Drillhole preview skipped: No Collar ID field selected.
2026-01-04 04:01:06 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-129586511076224 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-04 04:01:06 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-129586511076224 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/app/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-04 04:01:06 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-129586511076224 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/app/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/app/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-04 04:01:06 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-129586511076224 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/app/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/app/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/app/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-04 04:01:06 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-129586511076224 | Buffer creation failed
Traceback (most recent call last):
  File "/app/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-129586511076224 | Analyzing structures in Structure Layer with buffer 10m
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-129586511076224 | Processed 1 structural measurements from Structure Layer
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-129586511076224 | Loaded 0 interpretations from project
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: section_layer = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: section_layer_name = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-129586511076224 | Failed to restore layer for section_layer
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: buffer_dist = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: dem_layer = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: dem_layer_name = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-129586511076224 | Failed to restore layer for dem_layer
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: dem_band = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: scale = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: vert_exag = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: geol_layer = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: geol_layer_name = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-129586511076224 | Failed to restore layer for geol_layer
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: geol_field = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: struct_layer = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: struct_layer_name = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-129586511076224 | Failed to restore layer for struct_layer
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: struct_dip_field = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: struct_strike_field = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: dip_scale_factor = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: dh_collar_layer = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-129586511076224 | Failed to restore layer for dh_collar_layer
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: dh_collar_id = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: dh_use_geom = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: dh_collar_x = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: dh_collar_y = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: dh_collar_z = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: dh_collar_depth = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: dh_survey_layer = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-129586511076224 | Failed to restore layer for dh_survey_layer
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: dh_survey_id = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: dh_survey_depth = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: dh_survey_azim = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: dh_survey_incl = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: dh_interval_layer = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-129586511076224 | Failed to restore layer for dh_interval_layer
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: dh_interval_id = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: dh_interval_from = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: dh_interval_to = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: dh_interval_lith = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: last_output_dir = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: interp_custom_fields = 1.0
2026-01-04 04:01:06 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:176 | Thread-129586511076224 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: show_topo = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: show_geol = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: show_struct = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: show_drillholes = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: show_interpretations = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: auto_lod = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: adaptive_sampling = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: max_points = 1.0
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-129586511076224 | Settings loaded successfully from Project/Global config
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:447 | Thread-129586511076224 | Cache cleared by user
2026-01-04 04:01:06 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-129586511076224 | Test Title: Test Message
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-129586511076224 | Test Title: Test Message
2026-01-04 04:01:06 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-129586511076224 | Test Title: Test Message
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-129586511076224 | CRITICAL_OP: finalize_polygon | points=2
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-129586511076224 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-04 04:01:06 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-129586511076224 | finalize_polygon() aborted - less than 3 points
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-129586511076224 | CRITICAL_OP: finalize_polygon | points=3
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-129586511076224 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-129586511076224 | finalize_polygon() - emitting polygonFinished signal for c379601d-f521-4da0-8e45-c2e47a5d532c
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-129586511076224 | Interpretation polygon finalized with 3 vertices, ID: c379601d-f521-4da0-8e45-c2e47a5d532c
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-129586511076224 | finalize_polygon() completed
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-129586511076224 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-129586511076224 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-129586511076224 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-129586511076224 | ProfileInterpretationTool.reset() completed
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-129586511076224 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-129586511076224 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-129586511076224 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-129586511076224 | ProfileInterpretationTool.reset() completed
2026-01-04 04:01:06 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-129586511076224 | Failed to create locator for layer layer1: mock error
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-129586511076224 | ProfileInterpretationTool.activate() called
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-129586511076224 | ProfileInterpretationTool activated successfully
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-129586511076224 | ProfileInterpretationTool.deactivate() called
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-129586511076224 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-129586511076224 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-129586511076224 | ProfileInterpretationTool.reset() completed
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-129586511076224 | ProfileInterpretationTool deactivated successfully
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: buffer_dist = 100.5
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-129586511076224 | Setting saved to project: test_layer = id_123
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-129586511076224 | Setting saved to project: test_layer_name = RealName
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129586511076224 | Global setting fallback: test_layer = 1.0
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:363 | Thread-129586511076224 | Project setting hit: test_layer_name = RealName
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:420 | Thread-129586511076224 | Restoring layer: test_layer -> RealName
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-129586511076224 | Point 1 added: 0.00, 0.00
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-129586511076224 | Point 2 added: 100.00, 100.00
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-129586511076224 | Point 1 added: 50.00, 50.00
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-129586511076224 | reset() called, finalized=False
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-129586511076224 | finalize_measurement called with 1 points
2026-01-04 04:01:06 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-129586511076224 | Cannot finalize measurement with less than 2 points
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-129586511076224 | finalize_measurement called with 2 points
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-129586511076224 | Setting finalized = True
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-129586511076224 | Measurement finalized: 2 points, 100.00m total distance
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-129586511076224 | Switching to pan tool to stop measurement
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-129586511076224 | Pan tool activated - measurement should be frozen
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-129586511076224 | Ignoring click - measurement is finalized
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-129586511076224 | finalize_measurement called with 2 points
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-129586511076224 | Setting finalized = True
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-129586511076224 | Measurement finalized: 2 points, 100.00m total distance
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-129586511076224 | Switching to pan tool to stop measurement
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-129586511076224 | Pan tool activated - measurement should be frozen
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-129586511076224 | reset() called, finalized=False
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-129586511076224 | reset() called, finalized=False
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-129586511076224 | reset() called, finalized=True
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-129586511076224 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-129586511076224 | reset() called, finalized=False
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-129586511076224 | finalize_measurement called with 2 points
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-129586511076224 | Setting finalized = True
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-129586511076224 | Measurement finalized: 2 points, 100.00m total distance
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-129586511076224 | Rubber band redrawn with final points only
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-129586511076224 | Switching to pan tool to stop measurement
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-129586511076224 | Pan tool activated - measurement should be frozen
2026-01-04 04:01:06 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-129586511076224 | Failed to create locator for layer layer1: mock error
2026-01-04 04:01:06 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-129586511076224 | Failed to create locator for layer l2: fail
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-129586511076224 | ProfileMeasureTool activated
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-129586511076224 | reset() called, finalized=False
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-129586511076224 | ProfileMeasureTool deactivated
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-129586511076224 | Thread processing canceled.
2026-01-04 04:01:06 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-129586511076224 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/app/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/app/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-129586511076224 | Canceling 2 active threads...
2026-01-04 04:01:06 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-129586511076224 | Parallel processing error: Test error
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-129586511076224 | Canceling 2 active threads...
2026-01-04 04:01:06 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129586511076224 | create_drillhole_trace_layer called with 1 holes
2026-01-04 04:01:06 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-129586511076224 | Adding 1 drillhole trace features to layer
2026-01-04 04:01:07 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-129586511076224 | Failed to create memory layer: Fail
2026-01-04 04:01:07 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129586511076224 | create_drillhole_trace_layer called with 0 holes
2026-01-04 04:01:07 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-129586511076224 | No drillhole data provided for trace layer
2026-01-04 04:01:07 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129586511076224 | create_drillhole_trace_layer called with 1 holes
2026-01-04 04:01:07 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-129586511076224 | Skipping hole H1: insufficient trace points (1)
2026-01-04 04:01:07 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-129586511076224 | Adding 0 drillhole trace features to layer
2026-01-04 04:01:07 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129586511076224 | create_drillhole_trace_layer called with 1 holes
2026-01-04 04:01:07 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129586511076224 | render() called
2026-01-04 04:01:07 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-129586511076224 | No valid layers to render
2026-01-04 04:01:07 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129586511076224 | render() called
2026-01-04 04:01:07 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-129586511076224 | Error exporting preview
Traceback (most recent call last):
  File "/app/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-04 04:01:07 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129586511076224 | render() called
2026-01-04 04:01:07 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129586511076224 | render() called
2026-01-04 04:01:07 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129586511076224 | render() called
2026-01-04 04:01:07 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-129586511076224 | No valid layers to render
2026-01-04 04:01:07 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129586511076224 | render() called
2026-01-04 04:01:07 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129586511076224 | render() called
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-133167536077696 | File logging initialized: /app/sec_interp/logs/sec_interp_debug.log
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133167536077696 | Config set: SecInterp/scale = 50000.0
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133167536077696 | Config set: SecInterp/vert_exag = 1.0
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133167536077696 | Config set: SecInterp/buffer_dist = 100.0
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133167536077696 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133167536077696 | Config set: SecInterp/last_output_dir = 
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133167536077696 | Config set: SecInterp/dpi = 300
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133167536077696 | Config set: SecInterp/preview_width = 800
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133167536077696 | Config set: SecInterp/preview_height = 600
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133167536077696 | Config set: SecInterp/sampling_interval = 10.0
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133167536077696 | Config set: SecInterp/export_quality = 95
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133167536077696 | Config set: SecInterp/auto_lod = True
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133167536077696 | Config set: SecInterp/max_preview_points = 10000
2026-01-04 04:58:37 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-133167536077696 | Configuration reset to defaults
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133167536077696 | Config set: SecInterp/scale = 200.0
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133167536077696 | CacheService initialized (Default TTL: 3600s)
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133167536077696 | CacheService initialized (Default TTL: 3600s)
2026-01-04 04:58:37 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133167536077696 | CacheService initialized (Default TTL: 3600s)
2026-01-04 04:58:37 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-133167536077696 | Projecting collars from Test Layer with buffer 50.0m
2026-01-04 04:58:37 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-133167536077696 | No collars found within buffer area.
2026-01-04 04:58:37 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-133167536077696 | Projecting collars from Test Layer with buffer 50.0m
2026-01-04 04:58:37 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-133167536077696 | DrillholeService.project_collars END: Found 1 collars.
2026-01-04 04:58:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-133167536077696 | ✓ Saving profile axes...
2026-01-04 04:58:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-133167536077696 | ✓ Saving topographic profile...
2026-01-04 04:58:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-133167536077696 | ✓ Saving interpretation data...
2026-01-04 04:58:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-133167536077696 | 3D Export features are restricted for this user.
2026-01-04 04:58:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-133167536077696 | ✓ Saving profile axes...
2026-01-04 04:58:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-133167536077696 | ✓ Saving topographic profile...
2026-01-04 04:58:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-133167536077696 | ✓ Saving interpretation data...
2026-01-04 04:58:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-133167536077696 | ✓ Saving 3D interpretation data...
2026-01-04 04:58:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-133167536077696 | ✓ Saving profile axes...
2026-01-04 04:58:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-133167536077696 | ✓ Saving topographic profile...
2026-01-04 04:58:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-133167536077696 | ✓ Saving geological profile...
2026-01-04 04:58:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-133167536077696 | ✓ Saving structural profile...
2026-01-04 04:58:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-133167536077696 | ✓ Saving drillhole data...
2026-01-04 04:58:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-133167536077696 | ✓ Saving interpretation data...
2026-01-04 04:58:37 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-133167536077696 | Access denied for restricted feature: 3D Export
2026-01-04 04:58:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-133167536077696 | 3D Export features are restricted for this user.
2026-01-04 04:58:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-133167536077696 | ✓ Saving profile axes...
2026-01-04 04:58:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-133167536077696 | ✓ Saving topographic profile...
2026-01-04 04:58:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-133167536077696 | No interpretations provided for export.
2026-01-04 04:58:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-133167536077696 | ✓ Saving profile axes...
2026-01-04 04:58:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-133167536077696 | ✓ Saving drillhole data...
2026-01-04 04:58:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-133167536077696 | ✓ Saving geological profile...
2026-01-04 04:58:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-133167536077696 | ✓ Saving interpretation data...
2026-01-04 04:58:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-133167536077696 | ✓ Saving 3D interpretation data...
2026-01-04 04:58:37 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-133167536077696 | Invalid section line layer, skipping 3D export.
2026-01-04 04:58:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-133167536077696 | ✓ Saving interpretation data...
2026-01-04 04:58:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-133167536077696 | ✓ Saving structural profile...
2026-01-04 04:58:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-133167536077696 | ✓ Saving topographic profile...
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-133167536077696 | Generating master profile with interval=10.00
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-133167536077696 | Generated 1 geological segments
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-133167536077696 | Generating master profile with interval=50.00
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-133167536077696 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-133167536077696 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-133167536077696 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-133167536077696 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-133167536077696 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-133167536077696 | Running geometry operation: test
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-133167536077696 | Generated 1 drillhole traces
2026-01-04 04:58:38 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-133167536077696 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-04 04:58:38 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-133167536077696 | Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-133167536077696 | Generated 1 drillhole traces
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-133167536077696 | Drillhole preview skipped: No Collar ID field selected.
2026-01-04 04:58:38 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-133167536077696 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-04 04:58:38 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-133167536077696 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-04 04:58:38 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-133167536077696 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-04 04:58:38 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-133167536077696 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-04 04:58:38 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-133167536077696 | Buffer creation failed
Traceback (most recent call last):
  File "/app/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-133167536077696 | Analyzing structures in Structure Layer with buffer 10m
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-133167536077696 | Processed 1 structural measurements from Structure Layer
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-133167536077696 | Loaded 0 interpretations from project
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: section_layer = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: section_layer_name = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133167536077696 | Failed to restore layer for section_layer
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: buffer_dist = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: dem_layer = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: dem_layer_name = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133167536077696 | Failed to restore layer for dem_layer
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: dem_band = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: scale = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: vert_exag = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: geol_layer = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: geol_layer_name = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133167536077696 | Failed to restore layer for geol_layer
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: geol_field = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: struct_layer = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: struct_layer_name = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133167536077696 | Failed to restore layer for struct_layer
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: struct_dip_field = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: struct_strike_field = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: dip_scale_factor = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: dh_collar_layer = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133167536077696 | Failed to restore layer for dh_collar_layer
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: dh_collar_id = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: dh_use_geom = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: dh_collar_x = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: dh_collar_y = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: dh_collar_z = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: dh_collar_depth = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: dh_survey_layer = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133167536077696 | Failed to restore layer for dh_survey_layer
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: dh_survey_id = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: dh_survey_depth = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: dh_survey_azim = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: dh_survey_incl = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: dh_interval_layer = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133167536077696 | Failed to restore layer for dh_interval_layer
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: dh_interval_id = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: dh_interval_from = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: dh_interval_to = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: dh_interval_lith = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: last_output_dir = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: interp_custom_fields = 1.0
2026-01-04 04:58:38 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:176 | Thread-133167536077696 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: show_topo = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: show_geol = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: show_struct = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: show_drillholes = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: show_interpretations = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: auto_lod = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: adaptive_sampling = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: max_points = 1.0
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-133167536077696 | Settings loaded successfully from Project/Global config
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:447 | Thread-133167536077696 | Cache cleared by user
2026-01-04 04:58:38 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-133167536077696 | Test Title: Test Message
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-133167536077696 | Test Title: Test Message
2026-01-04 04:58:38 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-133167536077696 | Test Title: Test Message
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-133167536077696 | CRITICAL_OP: finalize_polygon | points=2
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-133167536077696 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-04 04:58:38 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-133167536077696 | finalize_polygon() aborted - less than 3 points
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-133167536077696 | CRITICAL_OP: finalize_polygon | points=3
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-133167536077696 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-133167536077696 | finalize_polygon() - emitting polygonFinished signal for 4af96e10-f08f-43ab-8aff-71fcf91e14a1
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-133167536077696 | Interpretation polygon finalized with 3 vertices, ID: 4af96e10-f08f-43ab-8aff-71fcf91e14a1
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-133167536077696 | finalize_polygon() completed
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-133167536077696 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-133167536077696 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-133167536077696 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-133167536077696 | ProfileInterpretationTool.reset() completed
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-133167536077696 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-133167536077696 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-133167536077696 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-133167536077696 | ProfileInterpretationTool.reset() completed
2026-01-04 04:58:38 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-133167536077696 | Failed to create locator for layer layer1: mock error
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-133167536077696 | ProfileInterpretationTool.activate() called
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-133167536077696 | ProfileInterpretationTool activated successfully
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-133167536077696 | ProfileInterpretationTool.deactivate() called
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-133167536077696 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-133167536077696 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-133167536077696 | ProfileInterpretationTool.reset() completed
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-133167536077696 | ProfileInterpretationTool deactivated successfully
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: buffer_dist = 100.5
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-133167536077696 | Setting saved to project: test_layer = id_123
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-133167536077696 | Setting saved to project: test_layer_name = RealName
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133167536077696 | Global setting fallback: test_layer = 1.0
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:363 | Thread-133167536077696 | Project setting hit: test_layer_name = RealName
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:420 | Thread-133167536077696 | Restoring layer: test_layer -> RealName
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-133167536077696 | Point 1 added: 0.00, 0.00
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-133167536077696 | Point 2 added: 100.00, 100.00
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-133167536077696 | Point 1 added: 50.00, 50.00
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133167536077696 | reset() called, finalized=False
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-133167536077696 | finalize_measurement called with 1 points
2026-01-04 04:58:38 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-133167536077696 | Cannot finalize measurement with less than 2 points
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-133167536077696 | finalize_measurement called with 2 points
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-133167536077696 | Setting finalized = True
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133167536077696 | Measurement finalized: 2 points, 100.00m total distance
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-133167536077696 | Switching to pan tool to stop measurement
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-133167536077696 | Pan tool activated - measurement should be frozen
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-133167536077696 | Ignoring click - measurement is finalized
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-133167536077696 | finalize_measurement called with 2 points
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-133167536077696 | Setting finalized = True
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133167536077696 | Measurement finalized: 2 points, 100.00m total distance
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-133167536077696 | Switching to pan tool to stop measurement
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-133167536077696 | Pan tool activated - measurement should be frozen
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133167536077696 | reset() called, finalized=False
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133167536077696 | reset() called, finalized=False
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133167536077696 | reset() called, finalized=True
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-133167536077696 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133167536077696 | reset() called, finalized=False
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-133167536077696 | finalize_measurement called with 2 points
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-133167536077696 | Setting finalized = True
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133167536077696 | Measurement finalized: 2 points, 100.00m total distance
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-133167536077696 | Rubber band redrawn with final points only
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-133167536077696 | Switching to pan tool to stop measurement
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-133167536077696 | Pan tool activated - measurement should be frozen
2026-01-04 04:58:38 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-133167536077696 | Failed to create locator for layer layer1: mock error
2026-01-04 04:58:38 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-133167536077696 | Failed to create locator for layer l2: fail
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-133167536077696 | ProfileMeasureTool activated
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133167536077696 | reset() called, finalized=False
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-133167536077696 | ProfileMeasureTool deactivated
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-133167536077696 | Thread processing canceled.
2026-01-04 04:58:38 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-133167536077696 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/app/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/app/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-133167536077696 | Canceling 2 active threads...
2026-01-04 04:58:38 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-133167536077696 | Parallel processing error: Test error
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-133167536077696 | Canceling 2 active threads...
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133167536077696 | create_drillhole_trace_layer called with 1 holes
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-133167536077696 | Adding 1 drillhole trace features to layer
2026-01-04 04:58:38 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-133167536077696 | Failed to create memory layer: Fail
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133167536077696 | create_drillhole_trace_layer called with 0 holes
2026-01-04 04:58:38 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-133167536077696 | No drillhole data provided for trace layer
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133167536077696 | create_drillhole_trace_layer called with 1 holes
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-133167536077696 | Skipping hole H1: insufficient trace points (1)
2026-01-04 04:58:38 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-133167536077696 | Adding 0 drillhole trace features to layer
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133167536077696 | create_drillhole_trace_layer called with 1 holes
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133167536077696 | render() called
2026-01-04 04:58:38 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-133167536077696 | No valid layers to render
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133167536077696 | render() called
2026-01-04 04:58:38 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-133167536077696 | Error exporting preview
Traceback (most recent call last):
  File "/app/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133167536077696 | render() called
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133167536077696 | render() called
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133167536077696 | render() called
2026-01-04 04:58:38 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-133167536077696 | No valid layers to render
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133167536077696 | render() called
2026-01-04 04:58:38 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133167536077696 | render() called
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-133418392910720 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133418392910720 | Config set: SecInterp/scale = 50000.0
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133418392910720 | Config set: SecInterp/vert_exag = 1.0
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133418392910720 | Config set: SecInterp/buffer_dist = 100.0
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133418392910720 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133418392910720 | Config set: SecInterp/last_output_dir = 
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133418392910720 | Config set: SecInterp/dpi = 300
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133418392910720 | Config set: SecInterp/preview_width = 800
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133418392910720 | Config set: SecInterp/preview_height = 600
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133418392910720 | Config set: SecInterp/sampling_interval = 10.0
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133418392910720 | Config set: SecInterp/export_quality = 95
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133418392910720 | Config set: SecInterp/auto_lod = True
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133418392910720 | Config set: SecInterp/max_preview_points = 10000
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-133418392910720 | Configuration reset to defaults
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133418392910720 | Config set: SecInterp/scale = 200.0
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133418392910720 | CacheService initialized (Default TTL: 3600s)
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133418392910720 | CacheService initialized (Default TTL: 3600s)
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133418392910720 | CacheService initialized (Default TTL: 3600s)
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-133418392910720 | Projecting collars from Test Layer with buffer 50.0m
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-133418392910720 | No collars found within buffer area.
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-133418392910720 | Projecting collars from Test Layer with buffer 50.0m
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-133418392910720 | DrillholeService.project_collars END: Found 1 collars.
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-133418392910720 | ✓ Saving profile axes...
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-133418392910720 | ✓ Saving topographic profile...
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-133418392910720 | ✓ Saving interpretation data...
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-133418392910720 | 3D Export features are restricted for this user.
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-133418392910720 | ✓ Saving profile axes...
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-133418392910720 | ✓ Saving topographic profile...
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-133418392910720 | ✓ Saving interpretation data...
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-133418392910720 | ✓ Saving 3D interpretation data...
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-133418392910720 | ✓ Saving profile axes...
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-133418392910720 | ✓ Saving topographic profile...
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-133418392910720 | ✓ Saving geological profile...
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-133418392910720 | ✓ Saving structural profile...
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-133418392910720 | ✓ Saving drillhole data...
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-133418392910720 | ✓ Saving interpretation data...
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-133418392910720 | Access denied for restricted feature: 3D Export
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-133418392910720 | 3D Export features are restricted for this user.
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-133418392910720 | ✓ Saving profile axes...
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-133418392910720 | ✓ Saving topographic profile...
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-133418392910720 | No interpretations provided for export.
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-133418392910720 | ✓ Saving profile axes...
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-133418392910720 | ✓ Saving drillhole data...
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-133418392910720 | ✓ Saving geological profile...
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-133418392910720 | ✓ Saving interpretation data...
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-133418392910720 | ✓ Saving 3D interpretation data...
2026-01-05 04:37:07 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-133418392910720 | Invalid section line layer, skipping 3D export.
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-133418392910720 | ✓ Saving interpretation data...
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-133418392910720 | ✓ Saving structural profile...
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-133418392910720 | ✓ Saving topographic profile...
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-133418392910720 | Generating master profile with interval=10.00
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-133418392910720 | Generated 1 geological segments
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-133418392910720 | Generating master profile with interval=50.00
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-133418392910720 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-133418392910720 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-133418392910720 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-133418392910720 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-133418392910720 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-05 04:37:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-133418392910720 | Running geometry operation: test
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-133418392910720 | Generated 1 drillhole traces
2026-01-05 04:37:07 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-133418392910720 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/workspaces/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-05 04:37:07 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-133418392910720 | Traceback (most recent call last):
  File "/workspaces/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/workspaces/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-133418392910720 | Generated 1 drillhole traces
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-133418392910720 | Drillhole preview skipped: No Collar ID field selected.
2026-01-05 04:37:07 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-133418392910720 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 04:37:07 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-133418392910720 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 04:37:07 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-133418392910720 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 04:37:07 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-133418392910720 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 04:37:07 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-133418392910720 | Buffer creation failed
Traceback (most recent call last):
  File "/workspaces/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-133418392910720 | Analyzing structures in Structure Layer with buffer 10m
2026-01-05 04:37:07 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-133418392910720 | Processed 1 structural measurements from Structure Layer
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-133418392910720 | Loaded 0 interpretations from project
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: section_layer = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: section_layer_name = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133418392910720 | Failed to restore layer for section_layer
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: buffer_dist = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: dem_layer = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: dem_layer_name = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133418392910720 | Failed to restore layer for dem_layer
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: dem_band = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: scale = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: vert_exag = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: geol_layer = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: geol_layer_name = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133418392910720 | Failed to restore layer for geol_layer
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: geol_field = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: struct_layer = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: struct_layer_name = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133418392910720 | Failed to restore layer for struct_layer
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: struct_dip_field = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: struct_strike_field = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: dip_scale_factor = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: dh_collar_layer = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133418392910720 | Failed to restore layer for dh_collar_layer
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: dh_collar_id = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: dh_use_geom = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: dh_collar_x = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: dh_collar_y = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: dh_collar_z = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: dh_collar_depth = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: dh_survey_layer = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133418392910720 | Failed to restore layer for dh_survey_layer
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: dh_survey_id = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: dh_survey_depth = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: dh_survey_azim = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: dh_survey_incl = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: dh_interval_layer = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133418392910720 | Failed to restore layer for dh_interval_layer
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: dh_interval_id = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: dh_interval_from = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: dh_interval_to = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: dh_interval_lith = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: last_output_dir = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: interp_custom_fields = 1.0
2026-01-05 04:37:08 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:176 | Thread-133418392910720 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: show_topo = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: show_geol = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: show_struct = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: show_drillholes = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: show_interpretations = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: auto_lod = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: adaptive_sampling = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: max_points = 1.0
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-133418392910720 | Settings loaded successfully from Project/Global config
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:447 | Thread-133418392910720 | Cache cleared by user
2026-01-05 04:37:08 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-133418392910720 | Test Title: Test Message
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-133418392910720 | Test Title: Test Message
2026-01-05 04:37:08 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-133418392910720 | Test Title: Test Message
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-133418392910720 | CRITICAL_OP: finalize_polygon | points=2
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-133418392910720 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-05 04:37:08 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-133418392910720 | finalize_polygon() aborted - less than 3 points
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-133418392910720 | CRITICAL_OP: finalize_polygon | points=3
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-133418392910720 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-133418392910720 | finalize_polygon() - emitting polygonFinished signal for 1ca894ce-2d97-4b77-970c-2f631cec6ef3
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-133418392910720 | Interpretation polygon finalized with 3 vertices, ID: 1ca894ce-2d97-4b77-970c-2f631cec6ef3
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-133418392910720 | finalize_polygon() completed
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-133418392910720 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-133418392910720 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-133418392910720 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-133418392910720 | ProfileInterpretationTool.reset() completed
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-133418392910720 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-133418392910720 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-133418392910720 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-133418392910720 | ProfileInterpretationTool.reset() completed
2026-01-05 04:37:08 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-133418392910720 | Failed to create locator for layer layer1: mock error
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-133418392910720 | ProfileInterpretationTool.activate() called
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-133418392910720 | ProfileInterpretationTool activated successfully
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-133418392910720 | ProfileInterpretationTool.deactivate() called
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-133418392910720 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-133418392910720 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-133418392910720 | ProfileInterpretationTool.reset() completed
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-133418392910720 | ProfileInterpretationTool deactivated successfully
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: buffer_dist = 100.5
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-133418392910720 | Setting saved to project: test_layer = id_123
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-133418392910720 | Setting saved to project: test_layer_name = RealName
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133418392910720 | Global setting fallback: test_layer = 1.0
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:363 | Thread-133418392910720 | Project setting hit: test_layer_name = RealName
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:420 | Thread-133418392910720 | Restoring layer: test_layer -> RealName
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-133418392910720 | Point 1 added: 0.00, 0.00
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-133418392910720 | Point 2 added: 100.00, 100.00
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-133418392910720 | Point 1 added: 50.00, 50.00
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133418392910720 | reset() called, finalized=False
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-133418392910720 | finalize_measurement called with 1 points
2026-01-05 04:37:08 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-133418392910720 | Cannot finalize measurement with less than 2 points
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-133418392910720 | finalize_measurement called with 2 points
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-133418392910720 | Setting finalized = True
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133418392910720 | Measurement finalized: 2 points, 100.00m total distance
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-133418392910720 | Switching to pan tool to stop measurement
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-133418392910720 | Pan tool activated - measurement should be frozen
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-133418392910720 | Ignoring click - measurement is finalized
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-133418392910720 | finalize_measurement called with 2 points
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-133418392910720 | Setting finalized = True
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133418392910720 | Measurement finalized: 2 points, 100.00m total distance
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-133418392910720 | Switching to pan tool to stop measurement
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-133418392910720 | Pan tool activated - measurement should be frozen
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133418392910720 | reset() called, finalized=False
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133418392910720 | reset() called, finalized=False
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133418392910720 | reset() called, finalized=True
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-133418392910720 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133418392910720 | reset() called, finalized=False
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-133418392910720 | finalize_measurement called with 2 points
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-133418392910720 | Setting finalized = True
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133418392910720 | Measurement finalized: 2 points, 100.00m total distance
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-133418392910720 | Rubber band redrawn with final points only
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-133418392910720 | Switching to pan tool to stop measurement
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-133418392910720 | Pan tool activated - measurement should be frozen
2026-01-05 04:37:08 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-133418392910720 | Failed to create locator for layer layer1: mock error
2026-01-05 04:37:08 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-133418392910720 | Failed to create locator for layer l2: fail
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-133418392910720 | ProfileMeasureTool activated
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133418392910720 | reset() called, finalized=False
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-133418392910720 | ProfileMeasureTool deactivated
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-133418392910720 | Thread processing canceled.
2026-01-05 04:37:08 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-133418392910720 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/workspaces/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/workspaces/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-133418392910720 | Canceling 2 active threads...
2026-01-05 04:37:08 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-133418392910720 | Parallel processing error: Test error
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-133418392910720 | Canceling 2 active threads...
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133418392910720 | create_drillhole_trace_layer called with 1 holes
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-133418392910720 | Adding 1 drillhole trace features to layer
2026-01-05 04:37:08 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-133418392910720 | Failed to create memory layer: Fail
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133418392910720 | create_drillhole_trace_layer called with 0 holes
2026-01-05 04:37:08 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-133418392910720 | No drillhole data provided for trace layer
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133418392910720 | create_drillhole_trace_layer called with 1 holes
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-133418392910720 | Skipping hole H1: insufficient trace points (1)
2026-01-05 04:37:08 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-133418392910720 | Adding 0 drillhole trace features to layer
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133418392910720 | create_drillhole_trace_layer called with 1 holes
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133418392910720 | render() called
2026-01-05 04:37:08 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-133418392910720 | No valid layers to render
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133418392910720 | render() called
2026-01-05 04:37:08 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-133418392910720 | Error exporting preview
Traceback (most recent call last):
  File "/workspaces/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133418392910720 | render() called
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133418392910720 | render() called
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133418392910720 | render() called
2026-01-05 04:37:08 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-133418392910720 | No valid layers to render
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133418392910720 | render() called
2026-01-05 04:37:08 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133418392910720 | render() called
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-134169278229376 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134169278229376 | Config set: SecInterp/scale = 50000.0
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134169278229376 | Config set: SecInterp/vert_exag = 1.0
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134169278229376 | Config set: SecInterp/buffer_dist = 100.0
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134169278229376 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134169278229376 | Config set: SecInterp/last_output_dir = 
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134169278229376 | Config set: SecInterp/dpi = 300
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134169278229376 | Config set: SecInterp/preview_width = 800
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134169278229376 | Config set: SecInterp/preview_height = 600
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134169278229376 | Config set: SecInterp/sampling_interval = 10.0
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134169278229376 | Config set: SecInterp/export_quality = 95
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134169278229376 | Config set: SecInterp/auto_lod = True
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134169278229376 | Config set: SecInterp/max_preview_points = 10000
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-134169278229376 | Configuration reset to defaults
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134169278229376 | Config set: SecInterp/scale = 200.0
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-134169278229376 | CacheService initialized (Default TTL: 3600s)
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-134169278229376 | CacheService initialized (Default TTL: 3600s)
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-134169278229376 | CacheService initialized (Default TTL: 3600s)
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-134169278229376 | Projecting collars from Test Layer with buffer 50.0m
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-134169278229376 | No collars found within buffer area.
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-134169278229376 | Projecting collars from Test Layer with buffer 50.0m
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-134169278229376 | DrillholeService.project_collars END: Found 1 collars.
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-134169278229376 | ✓ Saving profile axes...
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-134169278229376 | ✓ Saving topographic profile...
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-134169278229376 | ✓ Saving interpretation data...
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-134169278229376 | 3D Export features are restricted for this user.
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-134169278229376 | ✓ Saving profile axes...
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-134169278229376 | ✓ Saving topographic profile...
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-134169278229376 | ✓ Saving interpretation data...
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-134169278229376 | ✓ Saving 3D interpretation data...
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-134169278229376 | ✓ Saving profile axes...
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-134169278229376 | ✓ Saving topographic profile...
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-134169278229376 | ✓ Saving geological profile...
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-134169278229376 | ✓ Saving structural profile...
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-134169278229376 | ✓ Saving drillhole data...
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-134169278229376 | ✓ Saving interpretation data...
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-134169278229376 | Access denied for restricted feature: 3D Export
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-134169278229376 | 3D Export features are restricted for this user.
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-134169278229376 | ✓ Saving profile axes...
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-134169278229376 | ✓ Saving topographic profile...
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-134169278229376 | No interpretations provided for export.
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-134169278229376 | ✓ Saving profile axes...
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-134169278229376 | ✓ Saving drillhole data...
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-134169278229376 | ✓ Saving geological profile...
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-134169278229376 | ✓ Saving interpretation data...
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-134169278229376 | ✓ Saving 3D interpretation data...
2026-01-05 04:41:16 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-134169278229376 | Invalid section line layer, skipping 3D export.
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-134169278229376 | ✓ Saving interpretation data...
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-134169278229376 | ✓ Saving structural profile...
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-134169278229376 | ✓ Saving topographic profile...
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-134169278229376 | Generating master profile with interval=10.00
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-134169278229376 | Generated 1 geological segments
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-134169278229376 | Generating master profile with interval=50.00
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-134169278229376 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-134169278229376 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-134169278229376 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-134169278229376 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-134169278229376 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-05 04:41:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-134169278229376 | Running geometry operation: test
2026-01-05 04:41:16 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-134169278229376 | Generated 1 drillhole traces
2026-01-05 04:41:16 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-134169278229376 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/workspaces/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-05 04:41:16 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-134169278229376 | Traceback (most recent call last):
  File "/workspaces/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/workspaces/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-134169278229376 | Generated 1 drillhole traces
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-134169278229376 | Drillhole preview skipped: No Collar ID field selected.
2026-01-05 04:41:17 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-134169278229376 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 04:41:17 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-134169278229376 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 04:41:17 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-134169278229376 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 04:41:17 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-134169278229376 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 04:41:17 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-134169278229376 | Buffer creation failed
Traceback (most recent call last):
  File "/workspaces/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-134169278229376 | Analyzing structures in Structure Layer with buffer 10m
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-134169278229376 | Processed 1 structural measurements from Structure Layer
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-134169278229376 | Loaded 0 interpretations from project
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: section_layer = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: section_layer_name = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-134169278229376 | Failed to restore layer for section_layer
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: buffer_dist = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: dem_layer = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: dem_layer_name = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-134169278229376 | Failed to restore layer for dem_layer
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: dem_band = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: scale = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: vert_exag = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: geol_layer = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: geol_layer_name = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-134169278229376 | Failed to restore layer for geol_layer
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: geol_field = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: struct_layer = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: struct_layer_name = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-134169278229376 | Failed to restore layer for struct_layer
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: struct_dip_field = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: struct_strike_field = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: dip_scale_factor = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: dh_collar_layer = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-134169278229376 | Failed to restore layer for dh_collar_layer
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: dh_collar_id = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: dh_use_geom = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: dh_collar_x = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: dh_collar_y = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: dh_collar_z = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: dh_collar_depth = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: dh_survey_layer = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-134169278229376 | Failed to restore layer for dh_survey_layer
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: dh_survey_id = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: dh_survey_depth = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: dh_survey_azim = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: dh_survey_incl = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: dh_interval_layer = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-134169278229376 | Failed to restore layer for dh_interval_layer
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: dh_interval_id = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: dh_interval_from = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: dh_interval_to = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: dh_interval_lith = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: last_output_dir = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: interp_custom_fields = 1.0
2026-01-05 04:41:17 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:176 | Thread-134169278229376 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: show_topo = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: show_geol = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: show_struct = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: show_drillholes = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: show_interpretations = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: auto_lod = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: adaptive_sampling = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: max_points = 1.0
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-134169278229376 | Settings loaded successfully from Project/Global config
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:447 | Thread-134169278229376 | Cache cleared by user
2026-01-05 04:41:17 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-134169278229376 | Test Title: Test Message
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-134169278229376 | Test Title: Test Message
2026-01-05 04:41:17 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-134169278229376 | Test Title: Test Message
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-134169278229376 | CRITICAL_OP: finalize_polygon | points=2
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-134169278229376 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-05 04:41:17 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-134169278229376 | finalize_polygon() aborted - less than 3 points
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-134169278229376 | CRITICAL_OP: finalize_polygon | points=3
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-134169278229376 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-134169278229376 | finalize_polygon() - emitting polygonFinished signal for 4ef9989a-cbbb-406c-a630-81014b82999d
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-134169278229376 | Interpretation polygon finalized with 3 vertices, ID: 4ef9989a-cbbb-406c-a630-81014b82999d
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-134169278229376 | finalize_polygon() completed
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-134169278229376 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-134169278229376 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-134169278229376 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-134169278229376 | ProfileInterpretationTool.reset() completed
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-134169278229376 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-134169278229376 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-134169278229376 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-134169278229376 | ProfileInterpretationTool.reset() completed
2026-01-05 04:41:17 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-134169278229376 | Failed to create locator for layer layer1: mock error
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-134169278229376 | ProfileInterpretationTool.activate() called
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-134169278229376 | ProfileInterpretationTool activated successfully
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-134169278229376 | ProfileInterpretationTool.deactivate() called
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-134169278229376 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-134169278229376 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-134169278229376 | ProfileInterpretationTool.reset() completed
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-134169278229376 | ProfileInterpretationTool deactivated successfully
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: buffer_dist = 100.5
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-134169278229376 | Setting saved to project: test_layer = id_123
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-134169278229376 | Setting saved to project: test_layer_name = RealName
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134169278229376 | Global setting fallback: test_layer = 1.0
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:363 | Thread-134169278229376 | Project setting hit: test_layer_name = RealName
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:420 | Thread-134169278229376 | Restoring layer: test_layer -> RealName
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-134169278229376 | Point 1 added: 0.00, 0.00
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-134169278229376 | Point 2 added: 100.00, 100.00
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-134169278229376 | Point 1 added: 50.00, 50.00
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-134169278229376 | reset() called, finalized=False
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-134169278229376 | finalize_measurement called with 1 points
2026-01-05 04:41:17 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-134169278229376 | Cannot finalize measurement with less than 2 points
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-134169278229376 | finalize_measurement called with 2 points
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-134169278229376 | Setting finalized = True
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-134169278229376 | Measurement finalized: 2 points, 100.00m total distance
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-134169278229376 | Switching to pan tool to stop measurement
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-134169278229376 | Pan tool activated - measurement should be frozen
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-134169278229376 | Ignoring click - measurement is finalized
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-134169278229376 | finalize_measurement called with 2 points
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-134169278229376 | Setting finalized = True
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-134169278229376 | Measurement finalized: 2 points, 100.00m total distance
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-134169278229376 | Switching to pan tool to stop measurement
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-134169278229376 | Pan tool activated - measurement should be frozen
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-134169278229376 | reset() called, finalized=False
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-134169278229376 | reset() called, finalized=False
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-134169278229376 | reset() called, finalized=True
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-134169278229376 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-134169278229376 | reset() called, finalized=False
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-134169278229376 | finalize_measurement called with 2 points
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-134169278229376 | Setting finalized = True
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-134169278229376 | Measurement finalized: 2 points, 100.00m total distance
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-134169278229376 | Rubber band redrawn with final points only
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-134169278229376 | Switching to pan tool to stop measurement
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-134169278229376 | Pan tool activated - measurement should be frozen
2026-01-05 04:41:17 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-134169278229376 | Failed to create locator for layer layer1: mock error
2026-01-05 04:41:17 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-134169278229376 | Failed to create locator for layer l2: fail
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-134169278229376 | ProfileMeasureTool activated
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-134169278229376 | reset() called, finalized=False
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-134169278229376 | ProfileMeasureTool deactivated
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-134169278229376 | Thread processing canceled.
2026-01-05 04:41:17 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-134169278229376 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/workspaces/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/workspaces/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-134169278229376 | Canceling 2 active threads...
2026-01-05 04:41:17 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-134169278229376 | Parallel processing error: Test error
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-134169278229376 | Canceling 2 active threads...
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-134169278229376 | create_drillhole_trace_layer called with 1 holes
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-134169278229376 | Adding 1 drillhole trace features to layer
2026-01-05 04:41:17 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-134169278229376 | Failed to create memory layer: Fail
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-134169278229376 | create_drillhole_trace_layer called with 0 holes
2026-01-05 04:41:17 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-134169278229376 | No drillhole data provided for trace layer
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-134169278229376 | create_drillhole_trace_layer called with 1 holes
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-134169278229376 | Skipping hole H1: insufficient trace points (1)
2026-01-05 04:41:17 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-134169278229376 | Adding 0 drillhole trace features to layer
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-134169278229376 | create_drillhole_trace_layer called with 1 holes
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134169278229376 | render() called
2026-01-05 04:41:17 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-134169278229376 | No valid layers to render
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134169278229376 | render() called
2026-01-05 04:41:17 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-134169278229376 | Error exporting preview
Traceback (most recent call last):
  File "/workspaces/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134169278229376 | render() called
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134169278229376 | render() called
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134169278229376 | render() called
2026-01-05 04:41:17 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-134169278229376 | No valid layers to render
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134169278229376 | render() called
2026-01-05 04:41:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134169278229376 | render() called
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-136665474018176 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136665474018176 | Config set: SecInterp/scale = 50000.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136665474018176 | Config set: SecInterp/vert_exag = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136665474018176 | Config set: SecInterp/buffer_dist = 100.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136665474018176 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136665474018176 | Config set: SecInterp/last_output_dir = 
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136665474018176 | Config set: SecInterp/dpi = 300
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136665474018176 | Config set: SecInterp/preview_width = 800
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136665474018176 | Config set: SecInterp/preview_height = 600
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136665474018176 | Config set: SecInterp/sampling_interval = 10.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136665474018176 | Config set: SecInterp/export_quality = 95
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136665474018176 | Config set: SecInterp/auto_lod = True
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136665474018176 | Config set: SecInterp/max_preview_points = 10000
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-136665474018176 | Configuration reset to defaults
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136665474018176 | Config set: SecInterp/scale = 200.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-136665474018176 | CacheService initialized (Default TTL: 3600s)
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-136665474018176 | CacheService initialized (Default TTL: 3600s)
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-136665474018176 | CacheService initialized (Default TTL: 3600s)
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-136665474018176 | Projecting collars from Test Layer with buffer 50.0m
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-136665474018176 | No collars found within buffer area.
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-136665474018176 | Projecting collars from Test Layer with buffer 50.0m
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-136665474018176 | DrillholeService.project_collars END: Found 1 collars.
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-136665474018176 | ✓ Saving profile axes...
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-136665474018176 | ✓ Saving topographic profile...
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-136665474018176 | ✓ Saving interpretation data...
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-136665474018176 | 3D Export features are restricted for this user.
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-136665474018176 | ✓ Saving profile axes...
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-136665474018176 | ✓ Saving topographic profile...
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-136665474018176 | ✓ Saving interpretation data...
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-136665474018176 | ✓ Saving 3D interpretation data...
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-136665474018176 | ✓ Saving profile axes...
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-136665474018176 | ✓ Saving topographic profile...
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-136665474018176 | ✓ Saving geological profile...
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-136665474018176 | ✓ Saving structural profile...
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-136665474018176 | ✓ Saving drillhole data...
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-136665474018176 | ✓ Saving interpretation data...
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-136665474018176 | Access denied for restricted feature: 3D Export
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-136665474018176 | 3D Export features are restricted for this user.
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-136665474018176 | ✓ Saving profile axes...
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-136665474018176 | ✓ Saving topographic profile...
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-136665474018176 | No interpretations provided for export.
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-136665474018176 | ✓ Saving profile axes...
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-136665474018176 | ✓ Saving drillhole data...
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-136665474018176 | ✓ Saving geological profile...
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-136665474018176 | ✓ Saving interpretation data...
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-136665474018176 | ✓ Saving 3D interpretation data...
2026-01-05 04:43:24 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-136665474018176 | Invalid section line layer, skipping 3D export.
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-136665474018176 | ✓ Saving interpretation data...
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-136665474018176 | ✓ Saving structural profile...
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-136665474018176 | ✓ Saving topographic profile...
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-136665474018176 | Generating master profile with interval=10.00
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-136665474018176 | Generated 1 geological segments
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-136665474018176 | Generating master profile with interval=50.00
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-136665474018176 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-136665474018176 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-136665474018176 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-136665474018176 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-136665474018176 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-136665474018176 | Running geometry operation: test
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-136665474018176 | Generated 1 drillhole traces
2026-01-05 04:43:24 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-136665474018176 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/workspaces/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-05 04:43:24 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-136665474018176 | Traceback (most recent call last):
  File "/workspaces/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/workspaces/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-136665474018176 | Generated 1 drillhole traces
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-136665474018176 | Drillhole preview skipped: No Collar ID field selected.
2026-01-05 04:43:24 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-136665474018176 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 04:43:24 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-136665474018176 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 04:43:24 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-136665474018176 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 04:43:24 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-136665474018176 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 04:43:24 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-136665474018176 | Buffer creation failed
Traceback (most recent call last):
  File "/workspaces/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-136665474018176 | Analyzing structures in Structure Layer with buffer 10m
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-136665474018176 | Processed 1 structural measurements from Structure Layer
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-136665474018176 | Loaded 0 interpretations from project
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: section_layer = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: section_layer_name = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-136665474018176 | Failed to restore layer for section_layer
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: buffer_dist = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: dem_layer = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: dem_layer_name = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-136665474018176 | Failed to restore layer for dem_layer
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: dem_band = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: scale = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: vert_exag = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: geol_layer = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: geol_layer_name = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-136665474018176 | Failed to restore layer for geol_layer
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: geol_field = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: struct_layer = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: struct_layer_name = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-136665474018176 | Failed to restore layer for struct_layer
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: struct_dip_field = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: struct_strike_field = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: dip_scale_factor = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: dh_collar_layer = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-136665474018176 | Failed to restore layer for dh_collar_layer
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: dh_collar_id = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: dh_use_geom = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: dh_collar_x = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: dh_collar_y = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: dh_collar_z = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: dh_collar_depth = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: dh_survey_layer = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-136665474018176 | Failed to restore layer for dh_survey_layer
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: dh_survey_id = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: dh_survey_depth = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: dh_survey_azim = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: dh_survey_incl = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: dh_interval_layer = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-136665474018176 | Failed to restore layer for dh_interval_layer
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: dh_interval_id = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: dh_interval_from = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: dh_interval_to = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: dh_interval_lith = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: last_output_dir = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: interp_custom_fields = 1.0
2026-01-05 04:43:24 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:176 | Thread-136665474018176 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: show_topo = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: show_geol = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: show_struct = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: show_drillholes = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: show_interpretations = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: auto_lod = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: adaptive_sampling = 1.0
2026-01-05 04:43:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: max_points = 1.0
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-136665474018176 | Settings loaded successfully from Project/Global config
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:447 | Thread-136665474018176 | Cache cleared by user
2026-01-05 04:43:24 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-136665474018176 | Test Title: Test Message
2026-01-05 04:43:24 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-136665474018176 | Test Title: Test Message
2026-01-05 04:43:24 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-136665474018176 | Test Title: Test Message
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-136665474018176 | CRITICAL_OP: finalize_polygon | points=2
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-136665474018176 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-05 04:43:25 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-136665474018176 | finalize_polygon() aborted - less than 3 points
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-136665474018176 | CRITICAL_OP: finalize_polygon | points=3
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-136665474018176 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-136665474018176 | finalize_polygon() - emitting polygonFinished signal for 195af2de-e993-4a3f-a7a1-935209ad7d49
2026-01-05 04:43:25 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-136665474018176 | Interpretation polygon finalized with 3 vertices, ID: 195af2de-e993-4a3f-a7a1-935209ad7d49
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-136665474018176 | finalize_polygon() completed
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-136665474018176 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-136665474018176 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-136665474018176 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-136665474018176 | ProfileInterpretationTool.reset() completed
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-136665474018176 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-136665474018176 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-136665474018176 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-136665474018176 | ProfileInterpretationTool.reset() completed
2026-01-05 04:43:25 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-136665474018176 | Failed to create locator for layer layer1: mock error
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-136665474018176 | ProfileInterpretationTool.activate() called
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-136665474018176 | ProfileInterpretationTool activated successfully
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-136665474018176 | ProfileInterpretationTool.deactivate() called
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-136665474018176 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-136665474018176 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-136665474018176 | ProfileInterpretationTool.reset() completed
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-136665474018176 | ProfileInterpretationTool deactivated successfully
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: buffer_dist = 100.5
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-136665474018176 | Setting saved to project: test_layer = id_123
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-136665474018176 | Setting saved to project: test_layer_name = RealName
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136665474018176 | Global setting fallback: test_layer = 1.0
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:363 | Thread-136665474018176 | Project setting hit: test_layer_name = RealName
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:420 | Thread-136665474018176 | Restoring layer: test_layer -> RealName
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-136665474018176 | Point 1 added: 0.00, 0.00
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-136665474018176 | Point 2 added: 100.00, 100.00
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-136665474018176 | Point 1 added: 50.00, 50.00
2026-01-05 04:43:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-136665474018176 | reset() called, finalized=False
2026-01-05 04:43:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-136665474018176 | finalize_measurement called with 1 points
2026-01-05 04:43:25 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-136665474018176 | Cannot finalize measurement with less than 2 points
2026-01-05 04:43:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-136665474018176 | finalize_measurement called with 2 points
2026-01-05 04:43:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-136665474018176 | Setting finalized = True
2026-01-05 04:43:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-136665474018176 | Measurement finalized: 2 points, 100.00m total distance
2026-01-05 04:43:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-136665474018176 | Switching to pan tool to stop measurement
2026-01-05 04:43:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-136665474018176 | Pan tool activated - measurement should be frozen
2026-01-05 04:43:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-136665474018176 | Ignoring click - measurement is finalized
2026-01-05 04:43:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-136665474018176 | finalize_measurement called with 2 points
2026-01-05 04:43:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-136665474018176 | Setting finalized = True
2026-01-05 04:43:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-136665474018176 | Measurement finalized: 2 points, 100.00m total distance
2026-01-05 04:43:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-136665474018176 | Switching to pan tool to stop measurement
2026-01-05 04:43:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-136665474018176 | Pan tool activated - measurement should be frozen
2026-01-05 04:43:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-136665474018176 | reset() called, finalized=False
2026-01-05 04:43:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-136665474018176 | reset() called, finalized=False
2026-01-05 04:43:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-136665474018176 | reset() called, finalized=True
2026-01-05 04:43:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-136665474018176 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-05 04:43:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-136665474018176 | reset() called, finalized=False
2026-01-05 04:43:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-136665474018176 | finalize_measurement called with 2 points
2026-01-05 04:43:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-136665474018176 | Setting finalized = True
2026-01-05 04:43:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-136665474018176 | Measurement finalized: 2 points, 100.00m total distance
2026-01-05 04:43:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-136665474018176 | Rubber band redrawn with final points only
2026-01-05 04:43:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-136665474018176 | Switching to pan tool to stop measurement
2026-01-05 04:43:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-136665474018176 | Pan tool activated - measurement should be frozen
2026-01-05 04:43:25 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-136665474018176 | Failed to create locator for layer layer1: mock error
2026-01-05 04:43:25 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-136665474018176 | Failed to create locator for layer l2: fail
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-136665474018176 | ProfileMeasureTool activated
2026-01-05 04:43:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-136665474018176 | reset() called, finalized=False
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-136665474018176 | ProfileMeasureTool deactivated
2026-01-05 04:43:25 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-136665474018176 | Thread processing canceled.
2026-01-05 04:43:25 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-136665474018176 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/workspaces/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/workspaces/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-05 04:43:25 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-136665474018176 | Canceling 2 active threads...
2026-01-05 04:43:25 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-136665474018176 | Parallel processing error: Test error
2026-01-05 04:43:25 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-136665474018176 | Canceling 2 active threads...
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-136665474018176 | create_drillhole_trace_layer called with 1 holes
2026-01-05 04:43:25 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-136665474018176 | Adding 1 drillhole trace features to layer
2026-01-05 04:43:25 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-136665474018176 | Failed to create memory layer: Fail
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-136665474018176 | create_drillhole_trace_layer called with 0 holes
2026-01-05 04:43:25 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-136665474018176 | No drillhole data provided for trace layer
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-136665474018176 | create_drillhole_trace_layer called with 1 holes
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-136665474018176 | Skipping hole H1: insufficient trace points (1)
2026-01-05 04:43:25 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-136665474018176 | Adding 0 drillhole trace features to layer
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-136665474018176 | create_drillhole_trace_layer called with 1 holes
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136665474018176 | render() called
2026-01-05 04:43:25 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-136665474018176 | No valid layers to render
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136665474018176 | render() called
2026-01-05 04:43:25 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-136665474018176 | Error exporting preview
Traceback (most recent call last):
  File "/workspaces/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136665474018176 | render() called
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136665474018176 | render() called
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136665474018176 | render() called
2026-01-05 04:43:25 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-136665474018176 | No valid layers to render
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136665474018176 | render() called
2026-01-05 04:43:25 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136665474018176 | render() called
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-123546411817856 | File logging initialized: /workspaces/sec_interp/logs/sec_interp_debug.log
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123546411817856 | Config set: SecInterp/scale = 50000.0
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123546411817856 | Config set: SecInterp/vert_exag = 1.0
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123546411817856 | Config set: SecInterp/buffer_dist = 100.0
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123546411817856 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123546411817856 | Config set: SecInterp/last_output_dir = 
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123546411817856 | Config set: SecInterp/dpi = 300
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123546411817856 | Config set: SecInterp/preview_width = 800
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123546411817856 | Config set: SecInterp/preview_height = 600
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123546411817856 | Config set: SecInterp/sampling_interval = 10.0
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123546411817856 | Config set: SecInterp/export_quality = 95
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123546411817856 | Config set: SecInterp/auto_lod = True
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123546411817856 | Config set: SecInterp/max_preview_points = 10000
2026-01-05 04:46:40 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-123546411817856 | Configuration reset to defaults
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123546411817856 | Config set: SecInterp/scale = 200.0
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123546411817856 | CacheService initialized (Default TTL: 3600s)
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123546411817856 | CacheService initialized (Default TTL: 3600s)
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123546411817856 | CacheService initialized (Default TTL: 3600s)
2026-01-05 04:46:40 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-123546411817856 | Projecting collars from Test Layer with buffer 50.0m
2026-01-05 04:46:40 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-123546411817856 | No collars found within buffer area.
2026-01-05 04:46:40 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-123546411817856 | Projecting collars from Test Layer with buffer 50.0m
2026-01-05 04:46:40 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-123546411817856 | DrillholeService.project_collars END: Found 1 collars.
2026-01-05 04:46:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-123546411817856 | ✓ Saving profile axes...
2026-01-05 04:46:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-123546411817856 | ✓ Saving topographic profile...
2026-01-05 04:46:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-123546411817856 | ✓ Saving interpretation data...
2026-01-05 04:46:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-123546411817856 | 3D Export features are restricted for this user.
2026-01-05 04:46:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-123546411817856 | ✓ Saving profile axes...
2026-01-05 04:46:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-123546411817856 | ✓ Saving topographic profile...
2026-01-05 04:46:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-123546411817856 | ✓ Saving interpretation data...
2026-01-05 04:46:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-123546411817856 | ✓ Saving 3D interpretation data...
2026-01-05 04:46:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-123546411817856 | ✓ Saving profile axes...
2026-01-05 04:46:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-123546411817856 | ✓ Saving topographic profile...
2026-01-05 04:46:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-123546411817856 | ✓ Saving geological profile...
2026-01-05 04:46:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-123546411817856 | ✓ Saving structural profile...
2026-01-05 04:46:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-123546411817856 | ✓ Saving drillhole data...
2026-01-05 04:46:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-123546411817856 | ✓ Saving interpretation data...
2026-01-05 04:46:40 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-123546411817856 | Access denied for restricted feature: 3D Export
2026-01-05 04:46:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-123546411817856 | 3D Export features are restricted for this user.
2026-01-05 04:46:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-123546411817856 | ✓ Saving profile axes...
2026-01-05 04:46:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-123546411817856 | ✓ Saving topographic profile...
2026-01-05 04:46:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-123546411817856 | No interpretations provided for export.
2026-01-05 04:46:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-123546411817856 | ✓ Saving profile axes...
2026-01-05 04:46:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-123546411817856 | ✓ Saving drillhole data...
2026-01-05 04:46:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-123546411817856 | ✓ Saving geological profile...
2026-01-05 04:46:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-123546411817856 | ✓ Saving interpretation data...
2026-01-05 04:46:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-123546411817856 | ✓ Saving 3D interpretation data...
2026-01-05 04:46:40 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-123546411817856 | Invalid section line layer, skipping 3D export.
2026-01-05 04:46:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-123546411817856 | ✓ Saving interpretation data...
2026-01-05 04:46:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-123546411817856 | ✓ Saving structural profile...
2026-01-05 04:46:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-123546411817856 | ✓ Saving topographic profile...
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-123546411817856 | Generating master profile with interval=10.00
2026-01-05 04:46:40 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-123546411817856 | Generated 1 geological segments
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-123546411817856 | Generating master profile with interval=50.00
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-123546411817856 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-123546411817856 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-123546411817856 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-123546411817856 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-123546411817856 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-05 04:46:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-123546411817856 | Running geometry operation: test
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-123546411817856 | Generated 1 drillhole traces
2026-01-05 04:46:41 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-123546411817856 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/workspaces/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-05 04:46:41 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-123546411817856 | Traceback (most recent call last):
  File "/workspaces/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/workspaces/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-123546411817856 | Generated 1 drillhole traces
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-123546411817856 | Drillhole preview skipped: No Collar ID field selected.
2026-01-05 04:46:41 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-123546411817856 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 04:46:41 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-123546411817856 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 04:46:41 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-123546411817856 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 04:46:41 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-123546411817856 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
  File "/workspaces/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 04:46:41 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-123546411817856 | Buffer creation failed
Traceback (most recent call last):
  File "/workspaces/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-123546411817856 | Analyzing structures in Structure Layer with buffer 10m
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-123546411817856 | Processed 1 structural measurements from Structure Layer
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-123546411817856 | Loaded 0 interpretations from project
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: section_layer = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: section_layer_name = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-123546411817856 | Failed to restore layer for section_layer
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: buffer_dist = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: dem_layer = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: dem_layer_name = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-123546411817856 | Failed to restore layer for dem_layer
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: dem_band = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: scale = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: vert_exag = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: geol_layer = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: geol_layer_name = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-123546411817856 | Failed to restore layer for geol_layer
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: geol_field = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: struct_layer = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: struct_layer_name = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-123546411817856 | Failed to restore layer for struct_layer
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: struct_dip_field = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: struct_strike_field = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: dip_scale_factor = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: dh_collar_layer = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-123546411817856 | Failed to restore layer for dh_collar_layer
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: dh_collar_id = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: dh_use_geom = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: dh_collar_x = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: dh_collar_y = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: dh_collar_z = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: dh_collar_depth = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: dh_survey_layer = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-123546411817856 | Failed to restore layer for dh_survey_layer
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: dh_survey_id = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: dh_survey_depth = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: dh_survey_azim = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: dh_survey_incl = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: dh_interval_layer = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-123546411817856 | Failed to restore layer for dh_interval_layer
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: dh_interval_id = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: dh_interval_from = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: dh_interval_to = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: dh_interval_lith = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: last_output_dir = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: interp_custom_fields = 1.0
2026-01-05 04:46:41 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:176 | Thread-123546411817856 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: show_topo = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: show_geol = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: show_struct = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: show_drillholes = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: show_interpretations = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: auto_lod = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: adaptive_sampling = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: max_points = 1.0
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-123546411817856 | Settings loaded successfully from Project/Global config
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:447 | Thread-123546411817856 | Cache cleared by user
2026-01-05 04:46:41 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-123546411817856 | Test Title: Test Message
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-123546411817856 | Test Title: Test Message
2026-01-05 04:46:41 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-123546411817856 | Test Title: Test Message
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-123546411817856 | CRITICAL_OP: finalize_polygon | points=2
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-123546411817856 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-05 04:46:41 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-123546411817856 | finalize_polygon() aborted - less than 3 points
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-123546411817856 | CRITICAL_OP: finalize_polygon | points=3
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-123546411817856 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-123546411817856 | finalize_polygon() - emitting polygonFinished signal for 5886a768-2b3e-4df3-8c59-d5f1b9e752fe
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-123546411817856 | Interpretation polygon finalized with 3 vertices, ID: 5886a768-2b3e-4df3-8c59-d5f1b9e752fe
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-123546411817856 | finalize_polygon() completed
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-123546411817856 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-123546411817856 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-123546411817856 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-123546411817856 | ProfileInterpretationTool.reset() completed
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-123546411817856 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-123546411817856 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-123546411817856 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-123546411817856 | ProfileInterpretationTool.reset() completed
2026-01-05 04:46:41 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-123546411817856 | Failed to create locator for layer layer1: mock error
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-123546411817856 | ProfileInterpretationTool.activate() called
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-123546411817856 | ProfileInterpretationTool activated successfully
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-123546411817856 | ProfileInterpretationTool.deactivate() called
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-123546411817856 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-123546411817856 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-123546411817856 | ProfileInterpretationTool.reset() completed
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-123546411817856 | ProfileInterpretationTool deactivated successfully
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: buffer_dist = 100.5
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-123546411817856 | Setting saved to project: test_layer = id_123
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-123546411817856 | Setting saved to project: test_layer_name = RealName
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123546411817856 | Global setting fallback: test_layer = 1.0
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:363 | Thread-123546411817856 | Project setting hit: test_layer_name = RealName
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:420 | Thread-123546411817856 | Restoring layer: test_layer -> RealName
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-123546411817856 | Point 1 added: 0.00, 0.00
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-123546411817856 | Point 2 added: 100.00, 100.00
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-123546411817856 | Point 1 added: 50.00, 50.00
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-123546411817856 | reset() called, finalized=False
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-123546411817856 | finalize_measurement called with 1 points
2026-01-05 04:46:41 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-123546411817856 | Cannot finalize measurement with less than 2 points
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-123546411817856 | finalize_measurement called with 2 points
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-123546411817856 | Setting finalized = True
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-123546411817856 | Measurement finalized: 2 points, 100.00m total distance
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-123546411817856 | Switching to pan tool to stop measurement
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-123546411817856 | Pan tool activated - measurement should be frozen
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-123546411817856 | Ignoring click - measurement is finalized
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-123546411817856 | finalize_measurement called with 2 points
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-123546411817856 | Setting finalized = True
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-123546411817856 | Measurement finalized: 2 points, 100.00m total distance
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-123546411817856 | Switching to pan tool to stop measurement
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-123546411817856 | Pan tool activated - measurement should be frozen
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-123546411817856 | reset() called, finalized=False
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-123546411817856 | reset() called, finalized=False
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-123546411817856 | reset() called, finalized=True
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-123546411817856 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-123546411817856 | reset() called, finalized=False
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-123546411817856 | finalize_measurement called with 2 points
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-123546411817856 | Setting finalized = True
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-123546411817856 | Measurement finalized: 2 points, 100.00m total distance
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-123546411817856 | Rubber band redrawn with final points only
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-123546411817856 | Switching to pan tool to stop measurement
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-123546411817856 | Pan tool activated - measurement should be frozen
2026-01-05 04:46:41 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-123546411817856 | Failed to create locator for layer layer1: mock error
2026-01-05 04:46:41 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-123546411817856 | Failed to create locator for layer l2: fail
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-123546411817856 | ProfileMeasureTool activated
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-123546411817856 | reset() called, finalized=False
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-123546411817856 | ProfileMeasureTool deactivated
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-123546411817856 | Thread processing canceled.
2026-01-05 04:46:41 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-123546411817856 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/workspaces/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/workspaces/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-123546411817856 | Canceling 2 active threads...
2026-01-05 04:46:41 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-123546411817856 | Parallel processing error: Test error
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-123546411817856 | Canceling 2 active threads...
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-123546411817856 | create_drillhole_trace_layer called with 1 holes
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-123546411817856 | Adding 1 drillhole trace features to layer
2026-01-05 04:46:41 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-123546411817856 | Failed to create memory layer: Fail
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-123546411817856 | create_drillhole_trace_layer called with 0 holes
2026-01-05 04:46:41 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-123546411817856 | No drillhole data provided for trace layer
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-123546411817856 | create_drillhole_trace_layer called with 1 holes
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-123546411817856 | Skipping hole H1: insufficient trace points (1)
2026-01-05 04:46:41 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-123546411817856 | Adding 0 drillhole trace features to layer
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-123546411817856 | create_drillhole_trace_layer called with 1 holes
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123546411817856 | render() called
2026-01-05 04:46:41 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-123546411817856 | No valid layers to render
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123546411817856 | render() called
2026-01-05 04:46:41 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-123546411817856 | Error exporting preview
Traceback (most recent call last):
  File "/workspaces/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1114, in __call__
    return self._mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1118, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
  File "/usr/local/lib/python3.10/unittest/mock.py", line 1173, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123546411817856 | render() called
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123546411817856 | render() called
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123546411817856 | render() called
2026-01-05 04:46:41 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-123546411817856 | No valid layers to render
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123546411817856 | render() called
2026-01-05 04:46:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123546411817856 | render() called
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-126296162626496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-132725009427392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132725009427392 | CacheService initialized (Default TTL: 3600s)
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-132725009427392 | ProfileController initialized
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132725009427392 | Global setting fallback: buffer_dist = 100.0
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132725009427392 | Global setting fallback: scale = 50000.0
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132725009427392 | Global setting fallback: vert_exag = 1.0
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132725009427392 | Global setting fallback: dip_scale_factor = 1.0
2026-01-05 21:52:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132725009427392 | Global setting fallback: auto_lod = True
2026-01-05 21:52:47 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-132725009427392 | Settings loaded successfully from Project/Global config
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-123861611555776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123861611555776 | CacheService initialized (Default TTL: 3600s)
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-123861611555776 | ProfileController initialized
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123861611555776 | Global setting fallback: buffer_dist = 100.0
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123861611555776 | Global setting fallback: scale = 50000.0
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123861611555776 | Global setting fallback: vert_exag = 1.0
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123861611555776 | Global setting fallback: dip_scale_factor = 1.0
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123861611555776 | Global setting fallback: auto_lod = True
2026-01-05 21:53:15 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-123861611555776 | Settings loaded successfully from Project/Global config
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:502 | Thread-123861611555776 | Saved 1 interpretations to project
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123861611555776 | CacheService initialized (Default TTL: 3600s)
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-123861611555776 | ProfileController initialized
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123861611555776 | Global setting fallback: buffer_dist = 100.0
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123861611555776 | Global setting fallback: scale = 50000.0
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123861611555776 | Global setting fallback: vert_exag = 1.0
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123861611555776 | Global setting fallback: dip_scale_factor = 1.0
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123861611555776 | Global setting fallback: auto_lod = True
2026-01-05 21:53:15 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-123861611555776 | Settings loaded successfully from Project/Global config
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:502 | Thread-123861611555776 | Saved 1 interpretations to project
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:502 | Thread-123861611555776 | Saved 0 interpretations to project
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123861611555776 | CacheService initialized (Default TTL: 3600s)
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-123861611555776 | ProfileController initialized
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123861611555776 | Global setting fallback: buffer_dist = 100.0
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123861611555776 | Global setting fallback: scale = 50000.0
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123861611555776 | Global setting fallback: vert_exag = 1.0
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123861611555776 | Global setting fallback: dip_scale_factor = 1.0
2026-01-05 21:53:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123861611555776 | Global setting fallback: auto_lod = True
2026-01-05 21:53:15 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-123861611555776 | Settings loaded successfully from Project/Global config
2026-01-05 21:53:15 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-123861611555776 | Loaded 1 interpretations from project
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:39 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-127384184519616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:52 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-133171624168384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:53:53 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-133171624168384 | Point 1 added: 0.00, 0.00
2026-01-05 21:53:53 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-133171624168384 | Point 2 added: 10.00, 10.00
2026-01-05 21:53:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-133171624168384 | finalize_measurement called with 2 points
2026-01-05 21:53:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-133171624168384 | Setting finalized = True
2026-01-05 21:53:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133171624168384 | Measurement finalized: 2 points, 14.14m total distance
2026-01-05 21:53:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-133171624168384 | Rubber band redrawn with final points only
2026-01-05 21:53:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-133171624168384 | Switching to pan tool to stop measurement
2026-01-05 21:53:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-133171624168384 | Pan tool activated - measurement should be frozen
2026-01-05 21:53:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133171624168384 | reset() called, finalized=True
2026-01-05 21:53:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-133171624168384 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-05 21:53:53 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-133171624168384 | Point 1 added: 0.00, 0.00
2026-01-05 21:53:53 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-133171624168384 | Point 2 added: 100.00, 100.00
2026-01-05 21:53:53 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-133171624168384 | Point 3 added: 200.00, 150.00
2026-01-05 21:54:30 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-123215025712064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:54:30 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-123215025712064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:54:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-123215025712064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:54:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-123215025712064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:54:30 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-123215025712064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:54:30 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-123215025712064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:54:30 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-123215025712064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:54:30 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-123215025712064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:54:30 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-123215025712064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:54:30 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-123215025712064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:54:30 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-123215025712064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:54:30 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-123215025712064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:54:30 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-123215025712064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:54:30 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-123215025712064 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-05 21:54:30 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-123215025712064 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-05 21:54:55 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-139864216730560 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:54:55 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-139864216730560 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:54:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-139864216730560 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:54:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-139864216730560 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:54:55 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-139864216730560 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:54:55 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-139864216730560 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:54:55 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-139864216730560 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:54:55 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-139864216730560 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:54:55 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-139864216730560 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:54:55 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-139864216730560 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:54:55 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-139864216730560 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:54:55 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-139864216730560 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:54:55 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-139864216730560 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:54:55 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-139864216730560 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-05 21:54:55 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-139864216730560 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-131602069978048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:55:29 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-131602069978048 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-05 21:55:29 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-131602069978048 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-128394831555520 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-05 21:56:28 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-128394831555520 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-128394831555520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128394831555520 | CacheService initialized (Default TTL: 3600s)
2026-01-05 21:56:28 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-128394831555520 | ProfileController initialized
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128394831555520 | Global setting fallback: buffer_dist = 100.0
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128394831555520 | Global setting fallback: scale = 50000.0
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128394831555520 | Global setting fallback: vert_exag = 1.0
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128394831555520 | Global setting fallback: dip_scale_factor = 1.0
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128394831555520 | Global setting fallback: auto_lod = True
2026-01-05 21:56:29 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-128394831555520 | Settings loaded successfully from Project/Global config
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:502 | Thread-128394831555520 | Saved 1 interpretations to project
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128394831555520 | CacheService initialized (Default TTL: 3600s)
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-128394831555520 | ProfileController initialized
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128394831555520 | Global setting fallback: buffer_dist = 100.0
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128394831555520 | Global setting fallback: scale = 50000.0
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128394831555520 | Global setting fallback: vert_exag = 1.0
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128394831555520 | Global setting fallback: dip_scale_factor = 1.0
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128394831555520 | Global setting fallback: auto_lod = True
2026-01-05 21:56:29 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-128394831555520 | Settings loaded successfully from Project/Global config
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:502 | Thread-128394831555520 | Saved 1 interpretations to project
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:502 | Thread-128394831555520 | Saved 0 interpretations to project
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128394831555520 | CacheService initialized (Default TTL: 3600s)
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-128394831555520 | ProfileController initialized
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128394831555520 | Global setting fallback: buffer_dist = 100.0
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128394831555520 | Global setting fallback: scale = 50000.0
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128394831555520 | Global setting fallback: vert_exag = 1.0
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128394831555520 | Global setting fallback: dip_scale_factor = 1.0
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128394831555520 | Global setting fallback: auto_lod = True
2026-01-05 21:56:29 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-128394831555520 | Settings loaded successfully from Project/Global config
2026-01-05 21:56:29 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-128394831555520 | Loaded 1 interpretations from project
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-128394831555520 | Point 1 added: 0.00, 0.00
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-128394831555520 | Point 2 added: 10.00, 10.00
2026-01-05 21:56:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-128394831555520 | finalize_measurement called with 2 points
2026-01-05 21:56:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-128394831555520 | Setting finalized = True
2026-01-05 21:56:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-128394831555520 | Measurement finalized: 2 points, 14.14m total distance
2026-01-05 21:56:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-128394831555520 | Rubber band redrawn with final points only
2026-01-05 21:56:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-128394831555520 | Switching to pan tool to stop measurement
2026-01-05 21:56:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-128394831555520 | Pan tool activated - measurement should be frozen
2026-01-05 21:56:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-128394831555520 | reset() called, finalized=True
2026-01-05 21:56:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-128394831555520 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-128394831555520 | Point 1 added: 0.00, 0.00
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-128394831555520 | Point 2 added: 100.00, 100.00
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-128394831555520 | Point 3 added: 200.00, 150.00
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128394831555520 | CacheService initialized (Default TTL: 3600s)
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-128394831555520 | ProfileController initialized
2026-01-05 21:56:29 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-128394831555520 | Loaded 1 interpretations from project
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128394831555520 | Global setting fallback: buffer_dist = 100.0
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128394831555520 | Global setting fallback: scale = 50000.0
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128394831555520 | Global setting fallback: vert_exag = 1.0
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128394831555520 | Global setting fallback: dip_scale_factor = 1.0
2026-01-05 21:56:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128394831555520 | Global setting fallback: auto_lod = True
2026-01-05 21:56:29 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-128394831555520 | Settings loaded successfully from Project/Global config
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-134723829701568 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-05 21:58:11 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-134723829701568 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-134723829701568 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-134723829701568 | CacheService initialized (Default TTL: 3600s)
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-134723829701568 | ProfileController initialized
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134723829701568 | Global setting fallback: buffer_dist = 100.0
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134723829701568 | Global setting fallback: scale = 50000.0
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134723829701568 | Global setting fallback: vert_exag = 1.0
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134723829701568 | Global setting fallback: dip_scale_factor = 1.0
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134723829701568 | Global setting fallback: auto_lod = True
2026-01-05 21:58:11 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-134723829701568 | Settings loaded successfully from Project/Global config
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:502 | Thread-134723829701568 | Saved 1 interpretations to project
2026-01-05 21:58:11 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-134723829701568 | CacheService initialized (Default TTL: 3600s)
2026-01-05 21:58:12 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-134723829701568 | ProfileController initialized
2026-01-05 21:58:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134723829701568 | Global setting fallback: buffer_dist = 100.0
2026-01-05 21:58:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134723829701568 | Global setting fallback: scale = 50000.0
2026-01-05 21:58:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134723829701568 | Global setting fallback: vert_exag = 1.0
2026-01-05 21:58:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134723829701568 | Global setting fallback: dip_scale_factor = 1.0
2026-01-05 21:58:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134723829701568 | Global setting fallback: auto_lod = True
2026-01-05 21:58:12 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-134723829701568 | Settings loaded successfully from Project/Global config
2026-01-05 21:58:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:502 | Thread-134723829701568 | Saved 1 interpretations to project
2026-01-05 21:58:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:502 | Thread-134723829701568 | Saved 0 interpretations to project
2026-01-05 21:58:12 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-134723829701568 | CacheService initialized (Default TTL: 3600s)
2026-01-05 21:58:12 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-134723829701568 | ProfileController initialized
2026-01-05 21:58:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134723829701568 | Global setting fallback: buffer_dist = 100.0
2026-01-05 21:58:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134723829701568 | Global setting fallback: scale = 50000.0
2026-01-05 21:58:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134723829701568 | Global setting fallback: vert_exag = 1.0
2026-01-05 21:58:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134723829701568 | Global setting fallback: dip_scale_factor = 1.0
2026-01-05 21:58:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134723829701568 | Global setting fallback: auto_lod = True
2026-01-05 21:58:12 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-134723829701568 | Settings loaded successfully from Project/Global config
2026-01-05 21:58:12 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-134723829701568 | Loaded 1 interpretations from project
2026-01-05 21:58:12 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-134723829701568 | Point 1 added: 0.00, 0.00
2026-01-05 21:58:12 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-134723829701568 | Point 2 added: 10.00, 10.00
2026-01-05 21:58:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-134723829701568 | finalize_measurement called with 2 points
2026-01-05 21:58:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-134723829701568 | Setting finalized = True
2026-01-05 21:58:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-134723829701568 | Measurement finalized: 2 points, 14.14m total distance
2026-01-05 21:58:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-134723829701568 | Rubber band redrawn with final points only
2026-01-05 21:58:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-134723829701568 | Switching to pan tool to stop measurement
2026-01-05 21:58:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-134723829701568 | Pan tool activated - measurement should be frozen
2026-01-05 21:58:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-134723829701568 | reset() called, finalized=True
2026-01-05 21:58:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-134723829701568 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-05 21:58:12 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-134723829701568 | Point 1 added: 0.00, 0.00
2026-01-05 21:58:12 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-134723829701568 | Point 2 added: 100.00, 100.00
2026-01-05 21:58:12 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-134723829701568 | Point 3 added: 200.00, 150.00
2026-01-05 21:58:12 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-134723829701568 | CacheService initialized (Default TTL: 3600s)
2026-01-05 21:58:12 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-134723829701568 | ProfileController initialized
2026-01-05 21:58:12 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-134723829701568 | Loaded 1 interpretations from project
2026-01-05 21:58:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134723829701568 | Global setting fallback: buffer_dist = 100.0
2026-01-05 21:58:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134723829701568 | Global setting fallback: scale = 50000.0
2026-01-05 21:58:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134723829701568 | Global setting fallback: vert_exag = 1.0
2026-01-05 21:58:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134723829701568 | Global setting fallback: dip_scale_factor = 1.0
2026-01-05 21:58:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134723829701568 | Global setting fallback: auto_lod = True
2026-01-05 21:58:12 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-134723829701568 | Settings loaded successfully from Project/Global config
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.gui.main_dialog | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.gui.main_dialog_export | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.gui.services.parallel_geology_service | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.gui.main_dialog_preview | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.gui.main_dialog_settings | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.gui.main_dialog_signals | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.gui.tools.interpretation_tool | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.gui.tools.measure_tool | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.gui.preview_axes_manager | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.gui.preview_layer_factory | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.gui.preview_legend_renderer | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.gui.preview_renderer | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-131988160744384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:01 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-131988160744384 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-05 22:04:01 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-131988160744384 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131988160744384 | CacheService initialized (Default TTL: 3600s)
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-131988160744384 | ProfileController initialized
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-131988160744384 | Global setting fallback: buffer_dist = 100.0
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-131988160744384 | Global setting fallback: scale = 50000.0
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-131988160744384 | Global setting fallback: vert_exag = 1.0
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-131988160744384 | Global setting fallback: dip_scale_factor = 1.0
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-131988160744384 | Global setting fallback: auto_lod = True
2026-01-05 22:04:01 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-131988160744384 | Settings loaded successfully from Project/Global config
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:502 | Thread-131988160744384 | Saved 1 interpretations to project
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131988160744384 | CacheService initialized (Default TTL: 3600s)
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-131988160744384 | ProfileController initialized
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-131988160744384 | Global setting fallback: buffer_dist = 100.0
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-131988160744384 | Global setting fallback: scale = 50000.0
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-131988160744384 | Global setting fallback: vert_exag = 1.0
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-131988160744384 | Global setting fallback: dip_scale_factor = 1.0
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-131988160744384 | Global setting fallback: auto_lod = True
2026-01-05 22:04:01 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-131988160744384 | Settings loaded successfully from Project/Global config
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:502 | Thread-131988160744384 | Saved 1 interpretations to project
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:502 | Thread-131988160744384 | Saved 0 interpretations to project
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131988160744384 | CacheService initialized (Default TTL: 3600s)
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-131988160744384 | ProfileController initialized
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-131988160744384 | Global setting fallback: buffer_dist = 100.0
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-131988160744384 | Global setting fallback: scale = 50000.0
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-131988160744384 | Global setting fallback: vert_exag = 1.0
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-131988160744384 | Global setting fallback: dip_scale_factor = 1.0
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-131988160744384 | Global setting fallback: auto_lod = True
2026-01-05 22:04:01 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-131988160744384 | Settings loaded successfully from Project/Global config
2026-01-05 22:04:01 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-131988160744384 | Loaded 1 interpretations from project
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-131988160744384 | Point 1 added: 0.00, 0.00
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-131988160744384 | Point 2 added: 10.00, 10.00
2026-01-05 22:04:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-131988160744384 | finalize_measurement called with 2 points
2026-01-05 22:04:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-131988160744384 | Setting finalized = True
2026-01-05 22:04:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-131988160744384 | Measurement finalized: 2 points, 14.14m total distance
2026-01-05 22:04:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-131988160744384 | Rubber band redrawn with final points only
2026-01-05 22:04:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-131988160744384 | Switching to pan tool to stop measurement
2026-01-05 22:04:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-131988160744384 | Pan tool activated - measurement should be frozen
2026-01-05 22:04:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-131988160744384 | reset() called, finalized=True
2026-01-05 22:04:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-131988160744384 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-131988160744384 | Point 1 added: 0.00, 0.00
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-131988160744384 | Point 2 added: 100.00, 100.00
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-131988160744384 | Point 3 added: 200.00, 150.00
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131988160744384 | CacheService initialized (Default TTL: 3600s)
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-131988160744384 | ProfileController initialized
2026-01-05 22:04:01 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-131988160744384 | Loaded 1 interpretations from project
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-131988160744384 | Global setting fallback: buffer_dist = 100.0
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-131988160744384 | Global setting fallback: scale = 50000.0
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-131988160744384 | Global setting fallback: vert_exag = 1.0
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-131988160744384 | Global setting fallback: dip_scale_factor = 1.0
2026-01-05 22:04:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-131988160744384 | Global setting fallback: auto_lod = True
2026-01-05 22:04:01 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-131988160744384 | Settings loaded successfully from Project/Global config
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-134028068326336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134028068326336 | Config set: SecInterp/scale = 50000.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134028068326336 | Config set: SecInterp/vert_exag = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134028068326336 | Config set: SecInterp/buffer_dist = 100.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134028068326336 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134028068326336 | Config set: SecInterp/last_output_dir = 
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134028068326336 | Config set: SecInterp/dpi = 300
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134028068326336 | Config set: SecInterp/preview_width = 800
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134028068326336 | Config set: SecInterp/preview_height = 600
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134028068326336 | Config set: SecInterp/sampling_interval = 10.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134028068326336 | Config set: SecInterp/export_quality = 95
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134028068326336 | Config set: SecInterp/auto_lod = True
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134028068326336 | Config set: SecInterp/max_preview_points = 10000
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-134028068326336 | Configuration reset to defaults
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134028068326336 | Config set: SecInterp/scale = 200.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-134028068326336 | CacheService initialized (Default TTL: 3600s)
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-134028068326336 | CacheService initialized (Default TTL: 3600s)
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-134028068326336 | CacheService initialized (Default TTL: 3600s)
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-134028068326336 | Projecting collars from Test Layer with buffer 50.0m
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-134028068326336 | No collars found within buffer area.
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-134028068326336 | Projecting collars from Test Layer with buffer 50.0m
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-134028068326336 | DrillholeService.project_collars END: Found 1 collars.
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-134028068326336 | ✓ Saving profile axes...
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-134028068326336 | ✓ Saving topographic profile...
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-134028068326336 | ✓ Saving interpretation data...
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-134028068326336 | 3D Export features are restricted for this user.
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-134028068326336 | ✓ Saving profile axes...
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-134028068326336 | ✓ Saving topographic profile...
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-134028068326336 | ✓ Saving interpretation data...
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-134028068326336 | ✓ Saving 3D interpretation data...
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-134028068326336 | ✓ Saving profile axes...
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-134028068326336 | ✓ Saving topographic profile...
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-134028068326336 | ✓ Saving geological profile...
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-134028068326336 | ✓ Saving structural profile...
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-134028068326336 | ✓ Saving drillhole data...
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-134028068326336 | ✓ Saving interpretation data...
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-134028068326336 | Access denied for restricted feature: 3D Export
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-134028068326336 | 3D Export features are restricted for this user.
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-134028068326336 | ✓ Saving profile axes...
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-134028068326336 | ✓ Saving topographic profile...
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-134028068326336 | No interpretations provided for export.
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-134028068326336 | ✓ Saving profile axes...
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-134028068326336 | ✓ Saving drillhole data...
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-134028068326336 | ✓ Saving geological profile...
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-134028068326336 | ✓ Saving interpretation data...
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-134028068326336 | ✓ Saving 3D interpretation data...
2026-01-05 22:04:41 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-134028068326336 | Invalid section line layer, skipping 3D export.
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-134028068326336 | ✓ Saving interpretation data...
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-134028068326336 | ✓ Saving structural profile...
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-134028068326336 | ✓ Saving topographic profile...
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-134028068326336 | Generating master profile with interval=10.00
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-134028068326336 | Generated 1 geological segments
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-134028068326336 | Generating master profile with interval=50.00
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-134028068326336 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-134028068326336 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-134028068326336 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-134028068326336 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-134028068326336 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-134028068326336 | Running geometry operation: test
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-134028068326336 | Generated 1 drillhole traces
2026-01-05 22:04:41 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-134028068326336 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-05 22:04:41 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-134028068326336 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-134028068326336 | Generated 1 drillhole traces
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-134028068326336 | Drillhole preview skipped: No Collar ID field selected.
2026-01-05 22:04:41 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-134028068326336 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 22:04:41 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-134028068326336 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 22:04:41 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-134028068326336 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 22:04:41 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-134028068326336 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 22:04:41 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-134028068326336 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-134028068326336 | Analyzing structures in Structure Layer with buffer 10m
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-134028068326336 | Processed 1 structural measurements from Structure Layer
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-134028068326336 | Loaded 0 interpretations from project
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: section_layer = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: section_layer_name = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-134028068326336 | Failed to restore layer for section_layer
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: buffer_dist = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: dem_layer = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: dem_layer_name = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-134028068326336 | Failed to restore layer for dem_layer
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: dem_band = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: scale = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: vert_exag = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: geol_layer = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: geol_layer_name = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-134028068326336 | Failed to restore layer for geol_layer
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: geol_field = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: struct_layer = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: struct_layer_name = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-134028068326336 | Failed to restore layer for struct_layer
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: struct_dip_field = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: struct_strike_field = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: dip_scale_factor = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: dh_collar_layer = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-134028068326336 | Failed to restore layer for dh_collar_layer
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: dh_collar_id = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: dh_use_geom = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: dh_collar_x = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: dh_collar_y = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: dh_collar_z = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: dh_collar_depth = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: dh_survey_layer = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-134028068326336 | Failed to restore layer for dh_survey_layer
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: dh_survey_id = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: dh_survey_depth = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: dh_survey_azim = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: dh_survey_incl = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: dh_interval_layer = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-134028068326336 | Failed to restore layer for dh_interval_layer
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: dh_interval_id = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: dh_interval_from = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: dh_interval_to = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: dh_interval_lith = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: last_output_dir = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: interp_custom_fields = 1.0
2026-01-05 22:04:41 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:176 | Thread-134028068326336 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: show_topo = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: show_geol = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: show_struct = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: show_drillholes = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: show_interpretations = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: auto_lod = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: adaptive_sampling = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: max_points = 1.0
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-134028068326336 | Settings loaded successfully from Project/Global config
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:447 | Thread-134028068326336 | Cache cleared by user
2026-01-05 22:04:41 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-134028068326336 | Test Title: Test Message
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-134028068326336 | Test Title: Test Message
2026-01-05 22:04:41 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-134028068326336 | Test Title: Test Message
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-134028068326336 | CRITICAL_OP: finalize_polygon | points=2
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-134028068326336 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-05 22:04:41 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-134028068326336 | finalize_polygon() aborted - less than 3 points
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-134028068326336 | CRITICAL_OP: finalize_polygon | points=3
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-134028068326336 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-134028068326336 | finalize_polygon() - emitting polygonFinished signal for 4d09868d-5099-47a9-a16e-a5af18b9ff3f
2026-01-05 22:04:41 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-134028068326336 | Interpretation polygon finalized with 3 vertices, ID: 4d09868d-5099-47a9-a16e-a5af18b9ff3f
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-134028068326336 | finalize_polygon() completed
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-134028068326336 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-134028068326336 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-134028068326336 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-134028068326336 | ProfileInterpretationTool.reset() completed
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-134028068326336 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-134028068326336 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-134028068326336 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-134028068326336 | ProfileInterpretationTool.reset() completed
2026-01-05 22:04:41 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-134028068326336 | Failed to create locator for layer layer1: mock error
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-134028068326336 | ProfileInterpretationTool.activate() called
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-134028068326336 | ProfileInterpretationTool activated successfully
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-134028068326336 | ProfileInterpretationTool.deactivate() called
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-134028068326336 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-134028068326336 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-134028068326336 | ProfileInterpretationTool.reset() completed
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-134028068326336 | ProfileInterpretationTool deactivated successfully
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: buffer_dist = 100.5
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-134028068326336 | Setting saved to project: test_layer = id_123
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-134028068326336 | Setting saved to project: test_layer_name = RealName
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-134028068326336 | Global setting fallback: test_layer = 1.0
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:363 | Thread-134028068326336 | Project setting hit: test_layer_name = RealName
2026-01-05 22:04:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:420 | Thread-134028068326336 | Restoring layer: test_layer -> RealName
2026-01-05 22:04:42 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-134028068326336 | Point 1 added: 0.00, 0.00
2026-01-05 22:04:42 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-134028068326336 | Point 2 added: 100.00, 100.00
2026-01-05 22:04:42 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-134028068326336 | Point 1 added: 50.00, 50.00
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-134028068326336 | reset() called, finalized=False
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-134028068326336 | finalize_measurement called with 1 points
2026-01-05 22:04:42 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-134028068326336 | Cannot finalize measurement with less than 2 points
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-134028068326336 | finalize_measurement called with 2 points
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-134028068326336 | Setting finalized = True
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-134028068326336 | Measurement finalized: 2 points, 100.00m total distance
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-134028068326336 | Switching to pan tool to stop measurement
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-134028068326336 | Pan tool activated - measurement should be frozen
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-134028068326336 | Ignoring click - measurement is finalized
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-134028068326336 | finalize_measurement called with 2 points
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-134028068326336 | Setting finalized = True
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-134028068326336 | Measurement finalized: 2 points, 100.00m total distance
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-134028068326336 | Switching to pan tool to stop measurement
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-134028068326336 | Pan tool activated - measurement should be frozen
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-134028068326336 | reset() called, finalized=False
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-134028068326336 | reset() called, finalized=False
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-134028068326336 | reset() called, finalized=True
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-134028068326336 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-134028068326336 | reset() called, finalized=False
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-134028068326336 | finalize_measurement called with 2 points
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-134028068326336 | Setting finalized = True
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-134028068326336 | Measurement finalized: 2 points, 100.00m total distance
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-134028068326336 | Rubber band redrawn with final points only
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-134028068326336 | Switching to pan tool to stop measurement
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-134028068326336 | Pan tool activated - measurement should be frozen
2026-01-05 22:04:42 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-134028068326336 | Failed to create locator for layer layer1: mock error
2026-01-05 22:04:42 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-134028068326336 | Failed to create locator for layer l2: fail
2026-01-05 22:04:42 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-134028068326336 | ProfileMeasureTool activated
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-134028068326336 | reset() called, finalized=False
2026-01-05 22:04:42 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-134028068326336 | ProfileMeasureTool deactivated
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-134028068326336 | Thread processing canceled.
2026-01-05 22:04:42 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-134028068326336 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-134028068326336 | Canceling 2 active threads...
2026-01-05 22:04:42 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-134028068326336 | Parallel processing error: Test error
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-134028068326336 | Canceling 2 active threads...
2026-01-05 22:04:42 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-134028068326336 | create_drillhole_trace_layer called with 1 holes
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-134028068326336 | Adding 1 drillhole trace features to layer
2026-01-05 22:04:42 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-134028068326336 | Failed to create memory layer: Fail
2026-01-05 22:04:42 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-134028068326336 | create_drillhole_trace_layer called with 0 holes
2026-01-05 22:04:42 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-134028068326336 | No drillhole data provided for trace layer
2026-01-05 22:04:42 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-134028068326336 | create_drillhole_trace_layer called with 1 holes
2026-01-05 22:04:42 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-134028068326336 | Skipping hole H1: insufficient trace points (1)
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-134028068326336 | Adding 0 drillhole trace features to layer
2026-01-05 22:04:42 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-134028068326336 | create_drillhole_trace_layer called with 1 holes
2026-01-05 22:04:42 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134028068326336 | render() called
2026-01-05 22:04:42 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-134028068326336 | No valid layers to render
2026-01-05 22:04:42 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134028068326336 | render() called
2026-01-05 22:04:42 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-134028068326336 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-05 22:04:42 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134028068326336 | render() called
2026-01-05 22:04:42 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134028068326336 | render() called
2026-01-05 22:04:42 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134028068326336 | render() called
2026-01-05 22:04:42 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-134028068326336 | No valid layers to render
2026-01-05 22:04:42 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134028068326336 | render() called
2026-01-05 22:04:42 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134028068326336 | render() called
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-134028068326336 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-134028068326336 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-05 22:04:42 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-134028068326336 | Point 1 added: 0.00, 0.00
2026-01-05 22:04:42 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-134028068326336 | Point 2 added: 10.00, 10.00
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-134028068326336 | finalize_measurement called with 2 points
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-134028068326336 | Setting finalized = True
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-134028068326336 | Measurement finalized: 2 points, 14.14m total distance
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-134028068326336 | Rubber band redrawn with final points only
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-134028068326336 | Switching to pan tool to stop measurement
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-134028068326336 | Pan tool activated - measurement should be frozen
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-134028068326336 | reset() called, finalized=True
2026-01-05 22:04:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-134028068326336 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-05 22:04:42 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-134028068326336 | Point 1 added: 0.00, 0.00
2026-01-05 22:04:42 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-134028068326336 | Point 2 added: 100.00, 100.00
2026-01-05 22:04:42 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-134028068326336 | CacheService initialized (Default TTL: 3600s)
2026-01-05 22:04:42 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-134028068326336 | ProfileController initialized
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.exporters.csv_exporter | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.exporters.drillhole_exporters | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.exporters.image_exporter | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.exporters.interpretation_exporters | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.exporters.pdf_exporter | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.exporters.profile_exporters | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.exporters.shp_exporter | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.exporters.svg_exporter | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-130935060511680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130935060511680 | Config set: SecInterp/scale = 50000.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130935060511680 | Config set: SecInterp/vert_exag = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130935060511680 | Config set: SecInterp/buffer_dist = 100.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130935060511680 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130935060511680 | Config set: SecInterp/last_output_dir = 
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130935060511680 | Config set: SecInterp/dpi = 300
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130935060511680 | Config set: SecInterp/preview_width = 800
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130935060511680 | Config set: SecInterp/preview_height = 600
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130935060511680 | Config set: SecInterp/sampling_interval = 10.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130935060511680 | Config set: SecInterp/export_quality = 95
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130935060511680 | Config set: SecInterp/auto_lod = True
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130935060511680 | Config set: SecInterp/max_preview_points = 10000
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-130935060511680 | Configuration reset to defaults
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130935060511680 | Config set: SecInterp/scale = 200.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130935060511680 | CacheService initialized (Default TTL: 3600s)
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130935060511680 | CacheService initialized (Default TTL: 3600s)
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130935060511680 | CacheService initialized (Default TTL: 3600s)
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-130935060511680 | Projecting collars from Test Layer with buffer 50.0m
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-130935060511680 | No collars found within buffer area.
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-130935060511680 | Projecting collars from Test Layer with buffer 50.0m
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-130935060511680 | DrillholeService.project_collars END: Found 1 collars.
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-130935060511680 | ✓ Saving profile axes...
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-130935060511680 | ✓ Saving topographic profile...
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-130935060511680 | ✓ Saving interpretation data...
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-130935060511680 | 3D Export features are restricted for this user.
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-130935060511680 | ✓ Saving profile axes...
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-130935060511680 | ✓ Saving topographic profile...
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-130935060511680 | ✓ Saving interpretation data...
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-130935060511680 | ✓ Saving 3D interpretation data...
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-130935060511680 | ✓ Saving profile axes...
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-130935060511680 | ✓ Saving topographic profile...
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-130935060511680 | ✓ Saving geological profile...
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-130935060511680 | ✓ Saving structural profile...
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-130935060511680 | ✓ Saving drillhole data...
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-130935060511680 | ✓ Saving interpretation data...
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-130935060511680 | Access denied for restricted feature: 3D Export
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-130935060511680 | 3D Export features are restricted for this user.
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-130935060511680 | ✓ Saving profile axes...
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-130935060511680 | ✓ Saving topographic profile...
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-130935060511680 | No interpretations provided for export.
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-130935060511680 | ✓ Saving profile axes...
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-130935060511680 | ✓ Saving drillhole data...
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-130935060511680 | ✓ Saving geological profile...
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-130935060511680 | ✓ Saving interpretation data...
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-130935060511680 | ✓ Saving 3D interpretation data...
2026-01-05 22:06:12 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-130935060511680 | Invalid section line layer, skipping 3D export.
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-130935060511680 | ✓ Saving interpretation data...
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-130935060511680 | ✓ Saving structural profile...
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-130935060511680 | ✓ Saving topographic profile...
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-130935060511680 | Generating master profile with interval=10.00
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-130935060511680 | Generated 1 geological segments
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-130935060511680 | Generating master profile with interval=50.00
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-130935060511680 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-130935060511680 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-130935060511680 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-130935060511680 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-130935060511680 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-130935060511680 | Running geometry operation: test
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-130935060511680 | Generated 1 drillhole traces
2026-01-05 22:06:12 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-130935060511680 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-05 22:06:12 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-130935060511680 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-130935060511680 | Generated 1 drillhole traces
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-130935060511680 | Drillhole preview skipped: No Collar ID field selected.
2026-01-05 22:06:12 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-130935060511680 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 22:06:12 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-130935060511680 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 22:06:12 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-130935060511680 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 22:06:12 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-130935060511680 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 22:06:12 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-130935060511680 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-130935060511680 | Analyzing structures in Structure Layer with buffer 10m
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-130935060511680 | Processed 1 structural measurements from Structure Layer
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-130935060511680 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-130935060511680 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-130935060511680 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-130935060511680 | Loaded 0 interpretations from project
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: section_layer = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: section_layer_name = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-130935060511680 | Failed to restore layer for section_layer
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: buffer_dist = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: dem_layer = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: dem_layer_name = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-130935060511680 | Failed to restore layer for dem_layer
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: dem_band = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: scale = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: vert_exag = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: geol_layer = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: geol_layer_name = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-130935060511680 | Failed to restore layer for geol_layer
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: geol_field = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: struct_layer = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: struct_layer_name = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-130935060511680 | Failed to restore layer for struct_layer
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: struct_dip_field = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: struct_strike_field = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: dip_scale_factor = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: dh_collar_layer = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-130935060511680 | Failed to restore layer for dh_collar_layer
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: dh_collar_id = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: dh_use_geom = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: dh_collar_x = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: dh_collar_y = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: dh_collar_z = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: dh_collar_depth = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: dh_survey_layer = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-130935060511680 | Failed to restore layer for dh_survey_layer
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: dh_survey_id = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: dh_survey_depth = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: dh_survey_azim = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: dh_survey_incl = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: dh_interval_layer = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-130935060511680 | Failed to restore layer for dh_interval_layer
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: dh_interval_id = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: dh_interval_from = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: dh_interval_to = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: dh_interval_lith = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: last_output_dir = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: interp_custom_fields = 1.0
2026-01-05 22:06:12 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:176 | Thread-130935060511680 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: show_topo = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: show_geol = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: show_struct = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: show_drillholes = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: show_interpretations = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: auto_lod = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: adaptive_sampling = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: max_points = 1.0
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-130935060511680 | Settings loaded successfully from Project/Global config
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:447 | Thread-130935060511680 | Cache cleared by user
2026-01-05 22:06:12 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-130935060511680 | Test Title: Test Message
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-130935060511680 | Test Title: Test Message
2026-01-05 22:06:12 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-130935060511680 | Test Title: Test Message
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-130935060511680 | CRITICAL_OP: finalize_polygon | points=2
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-130935060511680 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-05 22:06:12 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-130935060511680 | finalize_polygon() aborted - less than 3 points
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-130935060511680 | CRITICAL_OP: finalize_polygon | points=3
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-130935060511680 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-130935060511680 | finalize_polygon() - emitting polygonFinished signal for a66b62bc-ed47-423a-a01f-b6adf1e2d69a
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-130935060511680 | Interpretation polygon finalized with 3 vertices, ID: a66b62bc-ed47-423a-a01f-b6adf1e2d69a
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-130935060511680 | finalize_polygon() completed
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-130935060511680 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-130935060511680 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-130935060511680 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-130935060511680 | ProfileInterpretationTool.reset() completed
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-130935060511680 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-130935060511680 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-130935060511680 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-130935060511680 | ProfileInterpretationTool.reset() completed
2026-01-05 22:06:12 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-130935060511680 | Failed to create locator for layer layer1: mock error
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-130935060511680 | ProfileInterpretationTool.activate() called
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-130935060511680 | ProfileInterpretationTool activated successfully
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-130935060511680 | ProfileInterpretationTool.deactivate() called
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-130935060511680 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-130935060511680 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-130935060511680 | ProfileInterpretationTool.reset() completed
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-130935060511680 | ProfileInterpretationTool deactivated successfully
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: buffer_dist = 100.5
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-130935060511680 | Setting saved to project: test_layer = id_123
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-130935060511680 | Setting saved to project: test_layer_name = RealName
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130935060511680 | Global setting fallback: test_layer = 1.0
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:363 | Thread-130935060511680 | Project setting hit: test_layer_name = RealName
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:420 | Thread-130935060511680 | Restoring layer: test_layer -> RealName
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-130935060511680 | Point 1 added: 0.00, 0.00
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-130935060511680 | Point 2 added: 100.00, 100.00
2026-01-05 22:06:12 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-130935060511680 | Point 1 added: 50.00, 50.00
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-130935060511680 | reset() called, finalized=False
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-130935060511680 | finalize_measurement called with 1 points
2026-01-05 22:06:12 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-130935060511680 | Cannot finalize measurement with less than 2 points
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-130935060511680 | finalize_measurement called with 2 points
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-130935060511680 | Setting finalized = True
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-130935060511680 | Measurement finalized: 2 points, 100.00m total distance
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-130935060511680 | Switching to pan tool to stop measurement
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-130935060511680 | Pan tool activated - measurement should be frozen
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-130935060511680 | Ignoring click - measurement is finalized
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-130935060511680 | finalize_measurement called with 2 points
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-130935060511680 | Setting finalized = True
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-130935060511680 | Measurement finalized: 2 points, 100.00m total distance
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-130935060511680 | Switching to pan tool to stop measurement
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-130935060511680 | Pan tool activated - measurement should be frozen
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-130935060511680 | reset() called, finalized=False
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-130935060511680 | reset() called, finalized=False
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-130935060511680 | reset() called, finalized=True
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-130935060511680 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-130935060511680 | reset() called, finalized=False
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-130935060511680 | finalize_measurement called with 2 points
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-130935060511680 | Setting finalized = True
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-130935060511680 | Measurement finalized: 2 points, 100.00m total distance
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-130935060511680 | Rubber band redrawn with final points only
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-130935060511680 | Switching to pan tool to stop measurement
2026-01-05 22:06:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-130935060511680 | Pan tool activated - measurement should be frozen
2026-01-05 22:06:12 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-130935060511680 | Failed to create locator for layer layer1: mock error
2026-01-05 22:06:12 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-130935060511680 | Failed to create locator for layer l2: fail
2026-01-05 22:06:13 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-130935060511680 | ProfileMeasureTool activated
2026-01-05 22:06:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-130935060511680 | reset() called, finalized=False
2026-01-05 22:06:13 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-130935060511680 | ProfileMeasureTool deactivated
2026-01-05 22:06:13 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-130935060511680 | Thread processing canceled.
2026-01-05 22:06:13 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-130935060511680 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-05 22:06:13 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-130935060511680 | Canceling 2 active threads...
2026-01-05 22:06:13 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-130935060511680 | Parallel processing error: Test error
2026-01-05 22:06:13 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-130935060511680 | Canceling 2 active threads...
2026-01-05 22:06:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-130935060511680 | create_drillhole_trace_layer called with 1 holes
2026-01-05 22:06:13 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-130935060511680 | Adding 1 drillhole trace features to layer
2026-01-05 22:06:13 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-130935060511680 | Failed to create memory layer: Fail
2026-01-05 22:06:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-130935060511680 | create_drillhole_trace_layer called with 0 holes
2026-01-05 22:06:13 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-130935060511680 | No drillhole data provided for trace layer
2026-01-05 22:06:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-130935060511680 | create_drillhole_trace_layer called with 1 holes
2026-01-05 22:06:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-130935060511680 | Skipping hole H1: insufficient trace points (1)
2026-01-05 22:06:13 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-130935060511680 | Adding 0 drillhole trace features to layer
2026-01-05 22:06:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-130935060511680 | create_drillhole_trace_layer called with 1 holes
2026-01-05 22:06:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130935060511680 | render() called
2026-01-05 22:06:13 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-130935060511680 | No valid layers to render
2026-01-05 22:06:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130935060511680 | render() called
2026-01-05 22:06:13 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-130935060511680 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-05 22:06:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130935060511680 | render() called
2026-01-05 22:06:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130935060511680 | render() called
2026-01-05 22:06:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130935060511680 | render() called
2026-01-05 22:06:13 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-130935060511680 | No valid layers to render
2026-01-05 22:06:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130935060511680 | render() called
2026-01-05 22:06:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130935060511680 | render() called
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.exporters.csv_exporter | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.exporters.drillhole_exporters | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.exporters.image_exporter | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.exporters.interpretation_exporters | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.exporters.pdf_exporter | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.exporters.profile_exporters | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.exporters.shp_exporter | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.exporters.svg_exporter | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-130335288888256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130335288888256 | Config set: SecInterp/scale = 50000.0
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130335288888256 | Config set: SecInterp/vert_exag = 1.0
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130335288888256 | Config set: SecInterp/buffer_dist = 100.0
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130335288888256 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130335288888256 | Config set: SecInterp/last_output_dir = 
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130335288888256 | Config set: SecInterp/dpi = 300
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130335288888256 | Config set: SecInterp/preview_width = 800
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130335288888256 | Config set: SecInterp/preview_height = 600
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130335288888256 | Config set: SecInterp/sampling_interval = 10.0
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130335288888256 | Config set: SecInterp/export_quality = 95
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130335288888256 | Config set: SecInterp/auto_lod = True
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130335288888256 | Config set: SecInterp/max_preview_points = 10000
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-130335288888256 | Configuration reset to defaults
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130335288888256 | Config set: SecInterp/scale = 200.0
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130335288888256 | CacheService initialized (Default TTL: 3600s)
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130335288888256 | CacheService initialized (Default TTL: 3600s)
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130335288888256 | CacheService initialized (Default TTL: 3600s)
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-130335288888256 | Projecting collars from Test Layer with buffer 50.0m
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-130335288888256 | No collars found within buffer area.
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-130335288888256 | Projecting collars from Test Layer with buffer 50.0m
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-130335288888256 | DrillholeService.project_collars END: Found 1 collars.
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-130335288888256 | ✓ Saving profile axes...
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-130335288888256 | ✓ Saving topographic profile...
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-130335288888256 | ✓ Saving interpretation data...
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-130335288888256 | 3D Export features are restricted for this user.
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-130335288888256 | ✓ Saving profile axes...
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-130335288888256 | ✓ Saving topographic profile...
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-130335288888256 | ✓ Saving interpretation data...
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-130335288888256 | ✓ Saving 3D interpretation data...
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-130335288888256 | ✓ Saving profile axes...
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-130335288888256 | ✓ Saving topographic profile...
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-130335288888256 | ✓ Saving geological profile...
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-130335288888256 | ✓ Saving structural profile...
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-130335288888256 | ✓ Saving drillhole data...
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-130335288888256 | ✓ Saving interpretation data...
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-130335288888256 | Access denied for restricted feature: 3D Export
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-130335288888256 | 3D Export features are restricted for this user.
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-130335288888256 | ✓ Saving profile axes...
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-130335288888256 | ✓ Saving topographic profile...
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-130335288888256 | No interpretations provided for export.
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-130335288888256 | ✓ Saving profile axes...
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-130335288888256 | ✓ Saving drillhole data...
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-130335288888256 | ✓ Saving geological profile...
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-130335288888256 | ✓ Saving interpretation data...
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-130335288888256 | ✓ Saving 3D interpretation data...
2026-01-05 22:11:29 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-130335288888256 | Invalid section line layer, skipping 3D export.
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-130335288888256 | ✓ Saving interpretation data...
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-130335288888256 | ✓ Saving structural profile...
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-130335288888256 | ✓ Saving topographic profile...
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-130335288888256 | Generating master profile with interval=10.00
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-130335288888256 | Generated 1 geological segments
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-130335288888256 | Generating master profile with interval=50.00
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-130335288888256 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-130335288888256 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-130335288888256 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-130335288888256 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-130335288888256 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-05 22:11:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-130335288888256 | Running geometry operation: test
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-130335288888256 | Generated 1 drillhole traces
2026-01-05 22:11:29 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-130335288888256 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-05 22:11:29 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-130335288888256 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-130335288888256 | Generated 1 drillhole traces
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-130335288888256 | Drillhole preview skipped: No Collar ID field selected.
2026-01-05 22:11:29 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-130335288888256 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 22:11:29 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-130335288888256 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 22:11:29 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-130335288888256 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 22:11:29 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-130335288888256 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 22:11:29 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-130335288888256 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-130335288888256 | Analyzing structures in Structure Layer with buffer 10m
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-130335288888256 | Processed 1 structural measurements from Structure Layer
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | export:139 | Thread-130335288888256 | Successfully exported 1 interpretations to /tmp/test_dynamic.shp
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-130335288888256 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-05 22:11:29 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:100 | Thread-130335288888256 | Failed to generate QML style: 'MockQgsVectorLayer' object has no attribute 'saveNamedStyle'
2026-01-05 22:11:29 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-130335288888256 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-05 22:11:30 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:100 | Thread-130335288888256 | Failed to generate QML style: 'MockQgsVectorLayer' object has no attribute 'saveNamedStyle'
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-130335288888256 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-05 22:11:30 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:100 | Thread-130335288888256 | Failed to generate QML style: 'MockQgsVectorLayer' object has no attribute 'saveNamedStyle'
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-130335288888256 | Loaded 0 interpretations from project
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: section_layer = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: section_layer_name = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-130335288888256 | Failed to restore layer for section_layer
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: buffer_dist = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: dem_layer = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: dem_layer_name = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-130335288888256 | Failed to restore layer for dem_layer
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: dem_band = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: scale = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: vert_exag = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: geol_layer = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: geol_layer_name = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-130335288888256 | Failed to restore layer for geol_layer
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: geol_field = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: struct_layer = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: struct_layer_name = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-130335288888256 | Failed to restore layer for struct_layer
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: struct_dip_field = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: struct_strike_field = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: dip_scale_factor = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: dh_collar_layer = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-130335288888256 | Failed to restore layer for dh_collar_layer
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: dh_collar_id = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: dh_use_geom = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: dh_collar_x = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: dh_collar_y = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: dh_collar_z = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: dh_collar_depth = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: dh_survey_layer = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-130335288888256 | Failed to restore layer for dh_survey_layer
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: dh_survey_id = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: dh_survey_depth = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: dh_survey_azim = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: dh_survey_incl = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: dh_interval_layer = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-130335288888256 | Failed to restore layer for dh_interval_layer
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: dh_interval_id = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: dh_interval_from = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: dh_interval_to = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: dh_interval_lith = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: last_output_dir = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: interp_custom_fields = 1.0
2026-01-05 22:11:30 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:176 | Thread-130335288888256 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: show_topo = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: show_geol = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: show_struct = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: show_drillholes = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: show_interpretations = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: auto_lod = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: adaptive_sampling = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: max_points = 1.0
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-130335288888256 | Settings loaded successfully from Project/Global config
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:447 | Thread-130335288888256 | Cache cleared by user
2026-01-05 22:11:30 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-130335288888256 | Test Title: Test Message
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-130335288888256 | Test Title: Test Message
2026-01-05 22:11:30 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-130335288888256 | Test Title: Test Message
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-130335288888256 | CRITICAL_OP: finalize_polygon | points=2
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-130335288888256 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-05 22:11:30 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-130335288888256 | finalize_polygon() aborted - less than 3 points
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-130335288888256 | CRITICAL_OP: finalize_polygon | points=3
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-130335288888256 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-130335288888256 | finalize_polygon() - emitting polygonFinished signal for a20f5491-207e-4bbf-ba1d-11cc99423b55
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-130335288888256 | Interpretation polygon finalized with 3 vertices, ID: a20f5491-207e-4bbf-ba1d-11cc99423b55
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-130335288888256 | finalize_polygon() completed
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-130335288888256 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-130335288888256 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-130335288888256 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-130335288888256 | ProfileInterpretationTool.reset() completed
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-130335288888256 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-130335288888256 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-130335288888256 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-130335288888256 | ProfileInterpretationTool.reset() completed
2026-01-05 22:11:30 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-130335288888256 | Failed to create locator for layer layer1: mock error
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-130335288888256 | ProfileInterpretationTool.activate() called
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-130335288888256 | ProfileInterpretationTool activated successfully
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-130335288888256 | ProfileInterpretationTool.deactivate() called
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-130335288888256 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-130335288888256 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-130335288888256 | ProfileInterpretationTool.reset() completed
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-130335288888256 | ProfileInterpretationTool deactivated successfully
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: buffer_dist = 100.5
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-130335288888256 | Setting saved to project: test_layer = id_123
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-130335288888256 | Setting saved to project: test_layer_name = RealName
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130335288888256 | Global setting fallback: test_layer = 1.0
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:363 | Thread-130335288888256 | Project setting hit: test_layer_name = RealName
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:420 | Thread-130335288888256 | Restoring layer: test_layer -> RealName
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-130335288888256 | Point 1 added: 0.00, 0.00
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-130335288888256 | Point 2 added: 100.00, 100.00
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-130335288888256 | Point 1 added: 50.00, 50.00
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-130335288888256 | reset() called, finalized=False
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-130335288888256 | finalize_measurement called with 1 points
2026-01-05 22:11:30 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-130335288888256 | Cannot finalize measurement with less than 2 points
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-130335288888256 | finalize_measurement called with 2 points
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-130335288888256 | Setting finalized = True
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-130335288888256 | Measurement finalized: 2 points, 100.00m total distance
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-130335288888256 | Switching to pan tool to stop measurement
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-130335288888256 | Pan tool activated - measurement should be frozen
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-130335288888256 | Ignoring click - measurement is finalized
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-130335288888256 | finalize_measurement called with 2 points
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-130335288888256 | Setting finalized = True
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-130335288888256 | Measurement finalized: 2 points, 100.00m total distance
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-130335288888256 | Switching to pan tool to stop measurement
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-130335288888256 | Pan tool activated - measurement should be frozen
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-130335288888256 | reset() called, finalized=False
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-130335288888256 | reset() called, finalized=False
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-130335288888256 | reset() called, finalized=True
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-130335288888256 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-130335288888256 | reset() called, finalized=False
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-130335288888256 | finalize_measurement called with 2 points
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-130335288888256 | Setting finalized = True
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-130335288888256 | Measurement finalized: 2 points, 100.00m total distance
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-130335288888256 | Rubber band redrawn with final points only
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-130335288888256 | Switching to pan tool to stop measurement
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-130335288888256 | Pan tool activated - measurement should be frozen
2026-01-05 22:11:30 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-130335288888256 | Failed to create locator for layer layer1: mock error
2026-01-05 22:11:30 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-130335288888256 | Failed to create locator for layer l2: fail
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-130335288888256 | ProfileMeasureTool activated
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-130335288888256 | reset() called, finalized=False
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-130335288888256 | ProfileMeasureTool deactivated
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-130335288888256 | Thread processing canceled.
2026-01-05 22:11:30 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-130335288888256 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-130335288888256 | Canceling 2 active threads...
2026-01-05 22:11:30 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-130335288888256 | Parallel processing error: Test error
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-130335288888256 | Canceling 2 active threads...
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-130335288888256 | create_drillhole_trace_layer called with 1 holes
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-130335288888256 | Adding 1 drillhole trace features to layer
2026-01-05 22:11:30 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-130335288888256 | Failed to create memory layer: Fail
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-130335288888256 | create_drillhole_trace_layer called with 0 holes
2026-01-05 22:11:30 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-130335288888256 | No drillhole data provided for trace layer
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-130335288888256 | create_drillhole_trace_layer called with 1 holes
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-130335288888256 | Skipping hole H1: insufficient trace points (1)
2026-01-05 22:11:30 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-130335288888256 | Adding 0 drillhole trace features to layer
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-130335288888256 | create_drillhole_trace_layer called with 1 holes
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130335288888256 | render() called
2026-01-05 22:11:30 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-130335288888256 | No valid layers to render
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130335288888256 | render() called
2026-01-05 22:11:30 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-130335288888256 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130335288888256 | render() called
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130335288888256 | render() called
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130335288888256 | render() called
2026-01-05 22:11:30 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-130335288888256 | No valid layers to render
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130335288888256 | render() called
2026-01-05 22:11:30 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130335288888256 | render() called
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-126328112196544 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126328112196544 | Config set: SecInterp/scale = 50000.0
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126328112196544 | Config set: SecInterp/vert_exag = 1.0
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126328112196544 | Config set: SecInterp/buffer_dist = 100.0
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126328112196544 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126328112196544 | Config set: SecInterp/last_output_dir = 
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126328112196544 | Config set: SecInterp/dpi = 300
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126328112196544 | Config set: SecInterp/preview_width = 800
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126328112196544 | Config set: SecInterp/preview_height = 600
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126328112196544 | Config set: SecInterp/sampling_interval = 10.0
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126328112196544 | Config set: SecInterp/export_quality = 95
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126328112196544 | Config set: SecInterp/auto_lod = True
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126328112196544 | Config set: SecInterp/max_preview_points = 10000
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-126328112196544 | Configuration reset to defaults
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126328112196544 | Config set: SecInterp/scale = 200.0
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126328112196544 | CacheService initialized (Default TTL: 3600s)
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126328112196544 | CacheService initialized (Default TTL: 3600s)
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126328112196544 | CacheService initialized (Default TTL: 3600s)
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-126328112196544 | Projecting collars from Test Layer with buffer 50.0m
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-126328112196544 | No collars found within buffer area.
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-126328112196544 | ✓ Saving profile axes...
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-126328112196544 | ✓ Saving topographic profile...
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-126328112196544 | ✓ Saving interpretation data...
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-126328112196544 | 3D Export features are restricted for this user.
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-126328112196544 | ✓ Saving profile axes...
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-126328112196544 | ✓ Saving topographic profile...
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-126328112196544 | ✓ Saving geological profile...
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-126328112196544 | ✓ Saving structural profile...
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-126328112196544 | ✓ Saving drillhole data...
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-126328112196544 | ✓ Saving interpretation data...
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-126328112196544 | ✓ Saving 3D interpretation data...
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-126328112196544 | ✓ Saving topographic profile...
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-126328112196544 | No interpretations provided for export.
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-126328112196544 | ✓ Saving profile axes...
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-126328112196544 | ✓ Saving drillhole data...
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-126328112196544 | ✓ Saving geological profile...
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-126328112196544 | ✓ Saving interpretation data...
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-126328112196544 | ✓ Saving 3D interpretation data...
2026-01-05 22:11:54 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-126328112196544 | Invalid section line layer, skipping 3D export.
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-126328112196544 | ✓ Saving interpretation data...
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-126328112196544 | ✓ Saving structural profile...
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-126328112196544 | ✓ Saving topographic profile...
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-126328112196544 | Generating master profile with interval=50.00
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-126328112196544 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-126328112196544 | Spatial Filter: confirmed 0 features intersecting buffer
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-126328112196544 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-126328112196544 | LOD Decimation: 100 -> 2 points (tol=10.00)
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-126328112196544 | LOD Decimation: 3 -> 2 points (tol=10.00)
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-126328112196544 | Running geometry operation: test
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-126328112196544 | Generated 1 drillhole traces
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-126328112196544 | Drillhole preview skipped: No Collar ID field selected.
2026-01-05 22:11:54 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-126328112196544 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 22:11:54 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-126328112196544 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 22:11:54 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-126328112196544 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 22:11:54 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-126328112196544 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 22:11:54 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-126328112196544 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126328112196544 | Global setting fallback: section_layer = 1.0
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126328112196544 | Global setting fallback: section_layer_name = 1.0
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-126328112196544 | Failed to restore layer for section_layer
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126328112196544 | Global setting fallback: buffer_dist = 1.0
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126328112196544 | Global setting fallback: dem_layer = 1.0
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126328112196544 | Global setting fallback: dem_layer_name = 1.0
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-126328112196544 | Failed to restore layer for dem_layer
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126328112196544 | Global setting fallback: dem_band = 1.0
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126328112196544 | Global setting fallback: scale = 1.0
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126328112196544 | Global setting fallback: vert_exag = 1.0
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126328112196544 | Global setting fallback: geol_layer = 1.0
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126328112196544 | Global setting fallback: geol_layer_name = 1.0
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-126328112196544 | Failed to restore layer for geol_layer
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126328112196544 | Global setting fallback: geol_field = 1.0
2026-01-05 22:11:54 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-126328112196544 | Test Title: Test Message
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-126328112196544 | Test Title: Test Message
2026-01-05 22:11:54 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-126328112196544 | Test Title: Test Message
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126328112196544 | Global setting fallback: buffer_dist = 100.5
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-126328112196544 | Setting saved to project: test_layer = id_123
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-126328112196544 | Setting saved to project: test_layer_name = RealName
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-126328112196544 | Thread processing canceled.
2026-01-05 22:11:54 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-126328112196544 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-126328112196544 | Canceling 2 active threads...
2026-01-05 22:11:54 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-126328112196544 | Parallel processing error: Test error
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-126328112196544 | Canceling 2 active threads...
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-126328112196544 | create_drillhole_trace_layer called with 1 holes
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-126328112196544 | Adding 1 drillhole trace features to layer
2026-01-05 22:11:54 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-126328112196544 | Failed to create memory layer: Fail
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126328112196544 | render() called
2026-01-05 22:11:54 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-126328112196544 | No valid layers to render
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126328112196544 | render() called
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126328112196544 | render() called
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126328112196544 | render() called
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126328112196544 | render() called
2026-01-05 22:11:54 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-126328112196544 | No valid layers to render
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126328112196544 | render() called
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126328112196544 | render() called
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-126328112196544 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-126328112196544 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126328112196544 | CacheService initialized (Default TTL: 3600s)
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-126328112196544 | ProfileController initialized
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126328112196544 | Global setting fallback: buffer_dist = 100.0
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126328112196544 | Global setting fallback: scale = 50000.0
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126328112196544 | Global setting fallback: vert_exag = 1.0
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126328112196544 | Global setting fallback: dip_scale_factor = 1.0
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126328112196544 | Global setting fallback: auto_lod = True
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-126328112196544 | Settings loaded successfully from Project/Global config
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:502 | Thread-126328112196544 | Saved 1 interpretations to project
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126328112196544 | CacheService initialized (Default TTL: 3600s)
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-126328112196544 | ProfileController initialized
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126328112196544 | Global setting fallback: buffer_dist = 100.0
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126328112196544 | Global setting fallback: scale = 50000.0
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126328112196544 | Global setting fallback: vert_exag = 1.0
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126328112196544 | Global setting fallback: dip_scale_factor = 1.0
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126328112196544 | Global setting fallback: auto_lod = True
2026-01-05 22:11:54 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-126328112196544 | Settings loaded successfully from Project/Global config
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:502 | Thread-126328112196544 | Saved 1 interpretations to project
2026-01-05 22:11:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:502 | Thread-126328112196544 | Saved 0 interpretations to project
2026-01-05 22:11:55 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126328112196544 | CacheService initialized (Default TTL: 3600s)
2026-01-05 22:11:55 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-126328112196544 | ProfileController initialized
2026-01-05 22:11:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126328112196544 | Global setting fallback: buffer_dist = 100.0
2026-01-05 22:11:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126328112196544 | Global setting fallback: scale = 50000.0
2026-01-05 22:11:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126328112196544 | Global setting fallback: vert_exag = 1.0
2026-01-05 22:11:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126328112196544 | Global setting fallback: dip_scale_factor = 1.0
2026-01-05 22:11:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126328112196544 | Global setting fallback: auto_lod = True
2026-01-05 22:11:55 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-126328112196544 | Settings loaded successfully from Project/Global config
2026-01-05 22:11:55 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-126328112196544 | Loaded 1 interpretations from project
2026-01-05 22:11:55 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-126328112196544 | Point 1 added: 0.00, 0.00
2026-01-05 22:11:55 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-126328112196544 | Point 2 added: 10.00, 10.00
2026-01-05 22:11:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-126328112196544 | finalize_measurement called with 2 points
2026-01-05 22:11:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-126328112196544 | Setting finalized = True
2026-01-05 22:11:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-126328112196544 | Measurement finalized: 2 points, 14.14m total distance
2026-01-05 22:11:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-126328112196544 | Rubber band redrawn with final points only
2026-01-05 22:11:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-126328112196544 | Switching to pan tool to stop measurement
2026-01-05 22:11:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-126328112196544 | Pan tool activated - measurement should be frozen
2026-01-05 22:11:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-126328112196544 | reset() called, finalized=True
2026-01-05 22:11:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-126328112196544 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-05 22:11:55 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-126328112196544 | Point 1 added: 0.00, 0.00
2026-01-05 22:11:55 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-126328112196544 | Point 2 added: 100.00, 100.00
2026-01-05 22:11:55 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-126328112196544 | Point 3 added: 200.00, 150.00
2026-01-05 22:11:55 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126328112196544 | CacheService initialized (Default TTL: 3600s)
2026-01-05 22:11:55 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-126328112196544 | ProfileController initialized
2026-01-05 22:11:55 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-126328112196544 | Loaded 1 interpretations from project
2026-01-05 22:11:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126328112196544 | Global setting fallback: buffer_dist = 100.0
2026-01-05 22:11:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126328112196544 | Global setting fallback: scale = 50000.0
2026-01-05 22:11:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126328112196544 | Global setting fallback: vert_exag = 1.0
2026-01-05 22:11:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126328112196544 | Global setting fallback: dip_scale_factor = 1.0
2026-01-05 22:11:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-126328112196544 | Global setting fallback: auto_lod = True
2026-01-05 22:11:55 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-126328112196544 | Settings loaded successfully from Project/Global config
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-126647256210368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-126647256210368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-126647256210368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-126647256210368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-126647256210368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-126647256210368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-126647256210368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-126647256210368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-126647256210368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-126647256210368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-126647256210368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-126647256210368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-126647256210368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-126647256210368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-126647256210368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-126647256210368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-126647256210368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-126647256210368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-126647256210368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-126647256210368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-126647256210368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-126647256210368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-126647256210368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126647256210368 | Config set: SecInterp/scale = 50000.0
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126647256210368 | Config set: SecInterp/vert_exag = 1.0
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126647256210368 | Config set: SecInterp/buffer_dist = 100.0
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126647256210368 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126647256210368 | Config set: SecInterp/last_output_dir = 
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126647256210368 | Config set: SecInterp/dpi = 300
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126647256210368 | Config set: SecInterp/preview_width = 800
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126647256210368 | Config set: SecInterp/preview_height = 600
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126647256210368 | Config set: SecInterp/sampling_interval = 10.0
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126647256210368 | Config set: SecInterp/export_quality = 95
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126647256210368 | Config set: SecInterp/auto_lod = True
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126647256210368 | Config set: SecInterp/max_preview_points = 10000
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-126647256210368 | Configuration reset to defaults
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126647256210368 | Config set: SecInterp/scale = 200.0
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126647256210368 | CacheService initialized (Default TTL: 3600s)
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126647256210368 | CacheService initialized (Default TTL: 3600s)
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126647256210368 | CacheService initialized (Default TTL: 3600s)
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-126647256210368 | Projecting collars from Test Layer with buffer 50.0m
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-126647256210368 | No collars found within buffer area.
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-126647256210368 | Projecting collars from Test Layer with buffer 50.0m
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-126647256210368 | DrillholeService.project_collars END: Found 1 collars.
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-126647256210368 | ✓ Saving profile axes...
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-126647256210368 | ✓ Saving topographic profile...
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-126647256210368 | ✓ Saving interpretation data...
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-126647256210368 | 3D Export features are restricted for this user.
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-126647256210368 | ✓ Saving profile axes...
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-126647256210368 | ✓ Saving topographic profile...
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-126647256210368 | ✓ Saving interpretation data...
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-126647256210368 | ✓ Saving 3D interpretation data...
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-126647256210368 | ✓ Saving profile axes...
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-126647256210368 | ✓ Saving topographic profile...
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-126647256210368 | ✓ Saving geological profile...
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-126647256210368 | ✓ Saving structural profile...
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-126647256210368 | ✓ Saving drillhole data...
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-126647256210368 | ✓ Saving interpretation data...
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-126647256210368 | Access denied for restricted feature: 3D Export
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-126647256210368 | 3D Export features are restricted for this user.
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-126647256210368 | ✓ Saving profile axes...
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-126647256210368 | ✓ Saving topographic profile...
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-126647256210368 | No interpretations provided for export.
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-126647256210368 | ✓ Saving profile axes...
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-126647256210368 | ✓ Saving drillhole data...
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-126647256210368 | ✓ Saving geological profile...
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-126647256210368 | ✓ Saving interpretation data...
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-126647256210368 | ✓ Saving 3D interpretation data...
2026-01-05 22:12:07 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-126647256210368 | Invalid section line layer, skipping 3D export.
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-126647256210368 | ✓ Saving interpretation data...
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-126647256210368 | ✓ Saving structural profile...
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-126647256210368 | ✓ Saving topographic profile...
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-126647256210368 | Generating master profile with interval=10.00
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-126647256210368 | Generated 1 geological segments
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-126647256210368 | Generating master profile with interval=50.00
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-126647256210368 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-126647256210368 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-126647256210368 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-126647256210368 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-126647256210368 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-05 22:12:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-126647256210368 | Running geometry operation: test
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-126647256210368 | Generated 1 drillhole traces
2026-01-05 22:12:07 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-126647256210368 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-05 22:12:07 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-126647256210368 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-126647256210368 | Generated 1 drillhole traces
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-126647256210368 | Drillhole preview skipped: No Collar ID field selected.
2026-01-05 22:12:07 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-126647256210368 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 22:12:07 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-126647256210368 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 22:12:07 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-126647256210368 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 22:12:07 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-126647256210368 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 22:12:07 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-126647256210368 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-126647256210368 | Analyzing structures in Structure Layer with buffer 10m
2026-01-05 22:12:07 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-126647256210368 | Processed 1 structural measurements from Structure Layer
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-125375966096320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-125375966096320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-125375966096320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-125375966096320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-125375966096320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-125375966096320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-125375966096320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-125375966096320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-125375966096320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-125375966096320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-125375966096320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-125375966096320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-125375966096320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-125375966096320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-125375966096320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-125375966096320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-125375966096320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-125375966096320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-125375966096320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-125375966096320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-125375966096320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-125375966096320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-125375966096320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-125375966096320 | Config set: SecInterp/scale = 50000.0
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-125375966096320 | Config set: SecInterp/vert_exag = 1.0
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-125375966096320 | Config set: SecInterp/buffer_dist = 100.0
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-125375966096320 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-125375966096320 | Config set: SecInterp/last_output_dir = 
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-125375966096320 | Config set: SecInterp/dpi = 300
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-125375966096320 | Config set: SecInterp/preview_width = 800
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-125375966096320 | Config set: SecInterp/preview_height = 600
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-125375966096320 | Config set: SecInterp/sampling_interval = 10.0
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-125375966096320 | Config set: SecInterp/export_quality = 95
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-125375966096320 | Config set: SecInterp/auto_lod = True
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-125375966096320 | Config set: SecInterp/max_preview_points = 10000
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-125375966096320 | Configuration reset to defaults
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-125375966096320 | Config set: SecInterp/scale = 200.0
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125375966096320 | CacheService initialized (Default TTL: 3600s)
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125375966096320 | CacheService initialized (Default TTL: 3600s)
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125375966096320 | CacheService initialized (Default TTL: 3600s)
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-125375966096320 | Projecting collars from Test Layer with buffer 50.0m
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-125375966096320 | No collars found within buffer area.
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-125375966096320 | Projecting collars from Test Layer with buffer 50.0m
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-125375966096320 | DrillholeService.project_collars END: Found 1 collars.
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-125375966096320 | ✓ Saving profile axes...
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-125375966096320 | ✓ Saving topographic profile...
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-125375966096320 | ✓ Saving interpretation data...
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-125375966096320 | 3D Export features are restricted for this user.
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-125375966096320 | ✓ Saving profile axes...
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-125375966096320 | ✓ Saving topographic profile...
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-125375966096320 | ✓ Saving interpretation data...
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-125375966096320 | ✓ Saving 3D interpretation data...
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-125375966096320 | ✓ Saving profile axes...
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-125375966096320 | ✓ Saving topographic profile...
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-125375966096320 | ✓ Saving geological profile...
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-125375966096320 | ✓ Saving structural profile...
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-125375966096320 | ✓ Saving drillhole data...
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-125375966096320 | ✓ Saving interpretation data...
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-125375966096320 | Access denied for restricted feature: 3D Export
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-125375966096320 | 3D Export features are restricted for this user.
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-125375966096320 | ✓ Saving profile axes...
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-125375966096320 | ✓ Saving topographic profile...
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-125375966096320 | No interpretations provided for export.
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-125375966096320 | ✓ Saving profile axes...
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-125375966096320 | ✓ Saving drillhole data...
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-125375966096320 | ✓ Saving geological profile...
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-125375966096320 | ✓ Saving interpretation data...
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-125375966096320 | ✓ Saving 3D interpretation data...
2026-01-05 22:12:23 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-125375966096320 | Invalid section line layer, skipping 3D export.
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-125375966096320 | ✓ Saving interpretation data...
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-125375966096320 | ✓ Saving structural profile...
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-125375966096320 | ✓ Saving topographic profile...
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-125375966096320 | Generating master profile with interval=10.00
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-125375966096320 | Generated 1 geological segments
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-125375966096320 | Generating master profile with interval=50.00
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-125375966096320 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-125375966096320 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-125375966096320 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-125375966096320 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-125375966096320 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-125375966096320 | Running geometry operation: test
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-125375966096320 | Generated 1 drillhole traces
2026-01-05 22:12:23 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-125375966096320 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-05 22:12:23 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-125375966096320 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-125375966096320 | Generated 1 drillhole traces
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-125375966096320 | Drillhole preview skipped: No Collar ID field selected.
2026-01-05 22:12:23 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-125375966096320 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 22:12:23 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-125375966096320 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 22:12:23 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-125375966096320 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 22:12:23 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-125375966096320 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-05 22:12:23 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-125375966096320 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-125375966096320 | Analyzing structures in Structure Layer with buffer 10m
2026-01-05 22:12:23 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-125375966096320 | Processed 1 structural measurements from Structure Layer
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-131286328851392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-131286328851392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-131286328851392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-131286328851392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-131286328851392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-131286328851392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-131286328851392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-131286328851392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-131286328851392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-131286328851392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-131286328851392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-131286328851392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-131286328851392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.exporters.csv_exporter | get_logger:127 | Thread-131286328851392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.exporters.drillhole_exporters | get_logger:127 | Thread-131286328851392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.exporters.image_exporter | get_logger:127 | Thread-131286328851392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-131286328851392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.exporters.interpretation_exporters | get_logger:127 | Thread-131286328851392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.exporters.pdf_exporter | get_logger:127 | Thread-131286328851392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.exporters.profile_exporters | get_logger:127 | Thread-131286328851392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.exporters.shp_exporter | get_logger:127 | Thread-131286328851392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:23 | DEBUG    | SecInterp.exporters.svg_exporter | get_logger:127 | Thread-131286328851392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:24 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | export:139 | Thread-131286328851392 | Successfully exported 1 interpretations to /tmp/test_dynamic.shp
2026-01-05 22:12:24 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-131286328851392 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-05 22:12:24 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-131286328851392 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-05 22:12:24 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-131286328851392 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-128115401915328 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-05 22:12:41 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-128115401915328 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-128115401915328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128115401915328 | CacheService initialized (Default TTL: 3600s)
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-128115401915328 | ProfileController initialized
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128115401915328 | Global setting fallback: buffer_dist = 100.0
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128115401915328 | Global setting fallback: scale = 50000.0
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128115401915328 | Global setting fallback: vert_exag = 1.0
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128115401915328 | Global setting fallback: dip_scale_factor = 1.0
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128115401915328 | Global setting fallback: auto_lod = True
2026-01-05 22:12:41 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-128115401915328 | Settings loaded successfully from Project/Global config
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:502 | Thread-128115401915328 | Saved 1 interpretations to project
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128115401915328 | CacheService initialized (Default TTL: 3600s)
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-128115401915328 | ProfileController initialized
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128115401915328 | Global setting fallback: buffer_dist = 100.0
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128115401915328 | Global setting fallback: scale = 50000.0
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128115401915328 | Global setting fallback: vert_exag = 1.0
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128115401915328 | Global setting fallback: dip_scale_factor = 1.0
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128115401915328 | Global setting fallback: auto_lod = True
2026-01-05 22:12:41 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-128115401915328 | Settings loaded successfully from Project/Global config
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:502 | Thread-128115401915328 | Saved 1 interpretations to project
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:502 | Thread-128115401915328 | Saved 0 interpretations to project
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128115401915328 | CacheService initialized (Default TTL: 3600s)
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-128115401915328 | ProfileController initialized
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128115401915328 | Global setting fallback: buffer_dist = 100.0
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128115401915328 | Global setting fallback: scale = 50000.0
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128115401915328 | Global setting fallback: vert_exag = 1.0
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128115401915328 | Global setting fallback: dip_scale_factor = 1.0
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128115401915328 | Global setting fallback: auto_lod = True
2026-01-05 22:12:41 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-128115401915328 | Settings loaded successfully from Project/Global config
2026-01-05 22:12:41 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-128115401915328 | Loaded 1 interpretations from project
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-128115401915328 | Point 1 added: 0.00, 0.00
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-128115401915328 | Point 2 added: 10.00, 10.00
2026-01-05 22:12:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-128115401915328 | finalize_measurement called with 2 points
2026-01-05 22:12:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-128115401915328 | Setting finalized = True
2026-01-05 22:12:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-128115401915328 | Measurement finalized: 2 points, 14.14m total distance
2026-01-05 22:12:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-128115401915328 | Rubber band redrawn with final points only
2026-01-05 22:12:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-128115401915328 | Switching to pan tool to stop measurement
2026-01-05 22:12:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-128115401915328 | Pan tool activated - measurement should be frozen
2026-01-05 22:12:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-128115401915328 | reset() called, finalized=True
2026-01-05 22:12:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-128115401915328 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-128115401915328 | Point 1 added: 0.00, 0.00
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-128115401915328 | Point 2 added: 100.00, 100.00
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-128115401915328 | Point 3 added: 200.00, 150.00
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128115401915328 | CacheService initialized (Default TTL: 3600s)
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-128115401915328 | ProfileController initialized
2026-01-05 22:12:41 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-128115401915328 | Loaded 1 interpretations from project
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128115401915328 | Global setting fallback: buffer_dist = 100.0
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128115401915328 | Global setting fallback: scale = 50000.0
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128115401915328 | Global setting fallback: vert_exag = 1.0
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128115401915328 | Global setting fallback: dip_scale_factor = 1.0
2026-01-05 22:12:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128115401915328 | Global setting fallback: auto_lod = True
2026-01-05 22:12:41 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-128115401915328 | Settings loaded successfully from Project/Global config
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-133972852300736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133972852300736 | Config set: SecInterp/scale = 50000.0
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133972852300736 | Config set: SecInterp/vert_exag = 1.0
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133972852300736 | Config set: SecInterp/buffer_dist = 100.0
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133972852300736 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133972852300736 | Config set: SecInterp/last_output_dir = 
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133972852300736 | Config set: SecInterp/dpi = 300
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133972852300736 | Config set: SecInterp/preview_width = 800
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133972852300736 | Config set: SecInterp/preview_height = 600
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133972852300736 | Config set: SecInterp/sampling_interval = 10.0
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133972852300736 | Config set: SecInterp/export_quality = 95
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133972852300736 | Config set: SecInterp/auto_lod = True
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133972852300736 | Config set: SecInterp/max_preview_points = 10000
2026-01-06 05:37:19 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-133972852300736 | Configuration reset to defaults
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133972852300736 | Config set: SecInterp/scale = 200.0
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133972852300736 | CacheService initialized (Default TTL: 3600s)
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133972852300736 | CacheService initialized (Default TTL: 3600s)
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133972852300736 | CacheService initialized (Default TTL: 3600s)
2026-01-06 05:37:19 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-133972852300736 | Projecting collars from Test Layer with buffer 50.0m
2026-01-06 05:37:19 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-133972852300736 | No collars found within buffer area.
2026-01-06 05:37:19 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-133972852300736 | Projecting collars from Test Layer with buffer 50.0m
2026-01-06 05:37:19 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-133972852300736 | DrillholeService.project_collars END: Found 1 collars.
2026-01-06 05:37:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-133972852300736 | ✓ Saving profile axes...
2026-01-06 05:37:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-133972852300736 | ✓ Saving topographic profile...
2026-01-06 05:37:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-133972852300736 | ✓ Saving interpretation data...
2026-01-06 05:37:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-133972852300736 | 3D Export features are restricted for this user.
2026-01-06 05:37:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-133972852300736 | ✓ Saving profile axes...
2026-01-06 05:37:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-133972852300736 | ✓ Saving topographic profile...
2026-01-06 05:37:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-133972852300736 | ✓ Saving interpretation data...
2026-01-06 05:37:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-133972852300736 | ✓ Saving 3D interpretation data...
2026-01-06 05:37:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-133972852300736 | ✓ Saving profile axes...
2026-01-06 05:37:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-133972852300736 | ✓ Saving topographic profile...
2026-01-06 05:37:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-133972852300736 | ✓ Saving geological profile...
2026-01-06 05:37:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-133972852300736 | ✓ Saving structural profile...
2026-01-06 05:37:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-133972852300736 | ✓ Saving drillhole data...
2026-01-06 05:37:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-133972852300736 | ✓ Saving interpretation data...
2026-01-06 05:37:19 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-133972852300736 | Access denied for restricted feature: 3D Export
2026-01-06 05:37:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-133972852300736 | 3D Export features are restricted for this user.
2026-01-06 05:37:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-133972852300736 | ✓ Saving profile axes...
2026-01-06 05:37:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-133972852300736 | ✓ Saving topographic profile...
2026-01-06 05:37:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-133972852300736 | No interpretations provided for export.
2026-01-06 05:37:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-133972852300736 | ✓ Saving profile axes...
2026-01-06 05:37:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-133972852300736 | ✓ Saving drillhole data...
2026-01-06 05:37:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-133972852300736 | ✓ Saving geological profile...
2026-01-06 05:37:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-133972852300736 | ✓ Saving interpretation data...
2026-01-06 05:37:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-133972852300736 | ✓ Saving 3D interpretation data...
2026-01-06 05:37:19 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-133972852300736 | Invalid section line layer, skipping 3D export.
2026-01-06 05:37:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-133972852300736 | ✓ Saving interpretation data...
2026-01-06 05:37:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-133972852300736 | ✓ Saving structural profile...
2026-01-06 05:37:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-133972852300736 | ✓ Saving topographic profile...
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-133972852300736 | Generating master profile with interval=10.00
2026-01-06 05:37:19 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-133972852300736 | Generated 1 geological segments
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-133972852300736 | Generating master profile with interval=50.00
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-133972852300736 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-133972852300736 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-133972852300736 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-133972852300736 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-133972852300736 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-06 05:37:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-133972852300736 | Running geometry operation: test
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-133972852300736 | Generated 1 drillhole traces
2026-01-06 05:37:20 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-133972852300736 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-06 05:37:20 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-133972852300736 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-133972852300736 | Generated 1 drillhole traces
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-133972852300736 | Drillhole preview skipped: No Collar ID field selected.
2026-01-06 05:37:20 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-133972852300736 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-06 05:37:20 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-133972852300736 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-06 05:37:20 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-133972852300736 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-06 05:37:20 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-133972852300736 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-06 05:37:20 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-133972852300736 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-133972852300736 | Analyzing structures in Structure Layer with buffer 10m
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-133972852300736 | Processed 1 structural measurements from Structure Layer
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | export:139 | Thread-133972852300736 | Successfully exported 1 interpretations to /tmp/test_dynamic.shp
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-133972852300736 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 05:37:20 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:100 | Thread-133972852300736 | Failed to generate QML style: 'MockQgsVectorLayer' object has no attribute 'saveNamedStyle'
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-133972852300736 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-06 05:37:20 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:100 | Thread-133972852300736 | Failed to generate QML style: 'MockQgsVectorLayer' object has no attribute 'saveNamedStyle'
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-133972852300736 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 05:37:20 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:100 | Thread-133972852300736 | Failed to generate QML style: 'MockQgsVectorLayer' object has no attribute 'saveNamedStyle'
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-133972852300736 | Loaded 0 interpretations from project
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: section_layer = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: section_layer_name = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133972852300736 | Failed to restore layer for section_layer
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: buffer_dist = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: dem_layer = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: dem_layer_name = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133972852300736 | Failed to restore layer for dem_layer
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: dem_band = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: scale = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: vert_exag = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: geol_layer = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: geol_layer_name = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133972852300736 | Failed to restore layer for geol_layer
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: geol_field = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: struct_layer = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: struct_layer_name = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133972852300736 | Failed to restore layer for struct_layer
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: struct_dip_field = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: struct_strike_field = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: dip_scale_factor = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: dh_collar_layer = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133972852300736 | Failed to restore layer for dh_collar_layer
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: dh_collar_id = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: dh_use_geom = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: dh_collar_x = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: dh_collar_y = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: dh_collar_z = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: dh_collar_depth = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: dh_survey_layer = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133972852300736 | Failed to restore layer for dh_survey_layer
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: dh_survey_id = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: dh_survey_depth = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: dh_survey_azim = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: dh_survey_incl = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: dh_interval_layer = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133972852300736 | Failed to restore layer for dh_interval_layer
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: dh_interval_id = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: dh_interval_from = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: dh_interval_to = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: dh_interval_lith = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: last_output_dir = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: interp_custom_fields = 1.0
2026-01-06 05:37:20 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:176 | Thread-133972852300736 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: show_topo = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: show_geol = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: show_struct = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: show_drillholes = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: show_interpretations = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: auto_lod = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: adaptive_sampling = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: max_points = 1.0
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-133972852300736 | Settings loaded successfully from Project/Global config
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:447 | Thread-133972852300736 | Cache cleared by user
2026-01-06 05:37:20 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-133972852300736 | Test Title: Test Message
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-133972852300736 | Test Title: Test Message
2026-01-06 05:37:20 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-133972852300736 | Test Title: Test Message
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-133972852300736 | CRITICAL_OP: finalize_polygon | points=2
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-133972852300736 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-06 05:37:20 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-133972852300736 | finalize_polygon() aborted - less than 3 points
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-133972852300736 | CRITICAL_OP: finalize_polygon | points=3
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-133972852300736 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-133972852300736 | finalize_polygon() - emitting polygonFinished signal for 24999578-83b6-42fe-b6e9-d6f94cb6619f
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-133972852300736 | Interpretation polygon finalized with 3 vertices, ID: 24999578-83b6-42fe-b6e9-d6f94cb6619f
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-133972852300736 | finalize_polygon() completed
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-133972852300736 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-133972852300736 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-133972852300736 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-133972852300736 | ProfileInterpretationTool.reset() completed
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-133972852300736 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-133972852300736 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-133972852300736 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-133972852300736 | ProfileInterpretationTool.reset() completed
2026-01-06 05:37:20 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-133972852300736 | Failed to create locator for layer layer1: mock error
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-133972852300736 | ProfileInterpretationTool.activate() called
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-133972852300736 | ProfileInterpretationTool activated successfully
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-133972852300736 | ProfileInterpretationTool.deactivate() called
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-133972852300736 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-133972852300736 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-133972852300736 | ProfileInterpretationTool.reset() completed
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-133972852300736 | ProfileInterpretationTool deactivated successfully
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: buffer_dist = 100.5
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-133972852300736 | Setting saved to project: test_layer = id_123
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-133972852300736 | Setting saved to project: test_layer_name = RealName
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133972852300736 | Global setting fallback: test_layer = 1.0
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:363 | Thread-133972852300736 | Project setting hit: test_layer_name = RealName
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:420 | Thread-133972852300736 | Restoring layer: test_layer -> RealName
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-133972852300736 | Point 1 added: 0.00, 0.00
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-133972852300736 | Point 2 added: 100.00, 100.00
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-133972852300736 | Point 1 added: 50.00, 50.00
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133972852300736 | reset() called, finalized=False
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-133972852300736 | finalize_measurement called with 1 points
2026-01-06 05:37:20 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-133972852300736 | Cannot finalize measurement with less than 2 points
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-133972852300736 | finalize_measurement called with 2 points
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-133972852300736 | Setting finalized = True
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133972852300736 | Measurement finalized: 2 points, 100.00m total distance
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-133972852300736 | Switching to pan tool to stop measurement
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-133972852300736 | Pan tool activated - measurement should be frozen
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-133972852300736 | Ignoring click - measurement is finalized
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-133972852300736 | finalize_measurement called with 2 points
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-133972852300736 | Setting finalized = True
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133972852300736 | Measurement finalized: 2 points, 100.00m total distance
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-133972852300736 | Switching to pan tool to stop measurement
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-133972852300736 | Pan tool activated - measurement should be frozen
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133972852300736 | reset() called, finalized=False
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133972852300736 | reset() called, finalized=False
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133972852300736 | reset() called, finalized=True
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-133972852300736 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133972852300736 | reset() called, finalized=False
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-133972852300736 | finalize_measurement called with 2 points
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-133972852300736 | Setting finalized = True
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133972852300736 | Measurement finalized: 2 points, 100.00m total distance
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-133972852300736 | Rubber band redrawn with final points only
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-133972852300736 | Switching to pan tool to stop measurement
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-133972852300736 | Pan tool activated - measurement should be frozen
2026-01-06 05:37:20 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-133972852300736 | Failed to create locator for layer layer1: mock error
2026-01-06 05:37:20 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-133972852300736 | Failed to create locator for layer l2: fail
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-133972852300736 | ProfileMeasureTool activated
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133972852300736 | reset() called, finalized=False
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-133972852300736 | ProfileMeasureTool deactivated
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-133972852300736 | Thread processing canceled.
2026-01-06 05:37:20 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-133972852300736 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-133972852300736 | Canceling 2 active threads...
2026-01-06 05:37:20 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-133972852300736 | Parallel processing error: Test error
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-133972852300736 | Canceling 2 active threads...
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133972852300736 | create_drillhole_trace_layer called with 1 holes
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-133972852300736 | Adding 1 drillhole trace features to layer
2026-01-06 05:37:20 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-133972852300736 | Failed to create memory layer: Fail
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133972852300736 | create_drillhole_trace_layer called with 0 holes
2026-01-06 05:37:20 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-133972852300736 | No drillhole data provided for trace layer
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133972852300736 | create_drillhole_trace_layer called with 1 holes
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-133972852300736 | Skipping hole H1: insufficient trace points (1)
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-133972852300736 | Adding 0 drillhole trace features to layer
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133972852300736 | create_drillhole_trace_layer called with 1 holes
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133972852300736 | render() called
2026-01-06 05:37:20 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-133972852300736 | No valid layers to render
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133972852300736 | render() called
2026-01-06 05:37:20 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-133972852300736 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133972852300736 | render() called
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133972852300736 | render() called
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133972852300736 | render() called
2026-01-06 05:37:20 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-133972852300736 | No valid layers to render
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133972852300736 | render() called
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133972852300736 | render() called
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-133972852300736 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-133972852300736 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-133972852300736 | Point 1 added: 0.00, 0.00
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-133972852300736 | Point 2 added: 10.00, 10.00
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-133972852300736 | finalize_measurement called with 2 points
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-133972852300736 | Setting finalized = True
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133972852300736 | Measurement finalized: 2 points, 14.14m total distance
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-133972852300736 | Rubber band redrawn with final points only
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-133972852300736 | Switching to pan tool to stop measurement
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-133972852300736 | Pan tool activated - measurement should be frozen
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133972852300736 | reset() called, finalized=True
2026-01-06 05:37:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-133972852300736 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-133972852300736 | Point 1 added: 0.00, 0.00
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-133972852300736 | Point 2 added: 100.00, 100.00
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133972852300736 | CacheService initialized (Default TTL: 3600s)
2026-01-06 05:37:20 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-133972852300736 | ProfileController initialized
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-124157392890816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-124157392890816 | Config set: SecInterp/scale = 50000.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-124157392890816 | Config set: SecInterp/vert_exag = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-124157392890816 | Config set: SecInterp/buffer_dist = 100.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-124157392890816 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-124157392890816 | Config set: SecInterp/last_output_dir = 
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-124157392890816 | Config set: SecInterp/dpi = 300
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-124157392890816 | Config set: SecInterp/preview_width = 800
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-124157392890816 | Config set: SecInterp/preview_height = 600
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-124157392890816 | Config set: SecInterp/sampling_interval = 10.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-124157392890816 | Config set: SecInterp/export_quality = 95
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-124157392890816 | Config set: SecInterp/auto_lod = True
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-124157392890816 | Config set: SecInterp/max_preview_points = 10000
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-124157392890816 | Configuration reset to defaults
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-124157392890816 | Config set: SecInterp/scale = 200.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124157392890816 | CacheService initialized (Default TTL: 3600s)
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124157392890816 | CacheService initialized (Default TTL: 3600s)
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124157392890816 | CacheService initialized (Default TTL: 3600s)
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-124157392890816 | Projecting collars from Test Layer with buffer 50.0m
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-124157392890816 | No collars found within buffer area.
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-124157392890816 | Projecting collars from Test Layer with buffer 50.0m
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-124157392890816 | DrillholeService.project_collars END: Found 1 collars.
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-124157392890816 | ✓ Saving profile axes...
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-124157392890816 | ✓ Saving topographic profile...
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-124157392890816 | ✓ Saving interpretation data...
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-124157392890816 | 3D Export features are restricted for this user.
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-124157392890816 | ✓ Saving profile axes...
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-124157392890816 | ✓ Saving topographic profile...
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-124157392890816 | ✓ Saving interpretation data...
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-124157392890816 | ✓ Saving 3D interpretation data...
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-124157392890816 | ✓ Saving profile axes...
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-124157392890816 | ✓ Saving topographic profile...
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-124157392890816 | ✓ Saving geological profile...
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-124157392890816 | ✓ Saving structural profile...
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-124157392890816 | ✓ Saving drillhole data...
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-124157392890816 | ✓ Saving interpretation data...
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-124157392890816 | Access denied for restricted feature: 3D Export
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-124157392890816 | 3D Export features are restricted for this user.
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-124157392890816 | ✓ Saving profile axes...
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-124157392890816 | ✓ Saving topographic profile...
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-124157392890816 | No interpretations provided for export.
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-124157392890816 | ✓ Saving profile axes...
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-124157392890816 | ✓ Saving drillhole data...
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-124157392890816 | ✓ Saving geological profile...
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-124157392890816 | ✓ Saving interpretation data...
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-124157392890816 | ✓ Saving 3D interpretation data...
2026-01-06 18:23:20 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-124157392890816 | Invalid section line layer, skipping 3D export.
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-124157392890816 | ✓ Saving interpretation data...
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-124157392890816 | ✓ Saving structural profile...
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-124157392890816 | ✓ Saving topographic profile...
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-124157392890816 | Generating master profile with interval=10.00
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-124157392890816 | Generated 1 geological segments
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-124157392890816 | Generating master profile with interval=50.00
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-124157392890816 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-124157392890816 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-124157392890816 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-124157392890816 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-124157392890816 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-124157392890816 | Running geometry operation: test
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-124157392890816 | Generated 1 drillhole traces
2026-01-06 18:23:20 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-124157392890816 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-06 18:23:20 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-124157392890816 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-124157392890816 | Generated 1 drillhole traces
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-124157392890816 | Drillhole preview skipped: No Collar ID field selected.
2026-01-06 18:23:20 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-124157392890816 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-06 18:23:20 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-124157392890816 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-06 18:23:20 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-124157392890816 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-06 18:23:20 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-124157392890816 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-06 18:23:20 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-124157392890816 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-124157392890816 | Analyzing structures in Structure Layer with buffer 10m
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-124157392890816 | Processed 1 structural measurements from Structure Layer
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | export:139 | Thread-124157392890816 | Successfully exported 1 interpretations to /tmp/test_dynamic.shp
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-124157392890816 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 18:23:20 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:100 | Thread-124157392890816 | Failed to generate QML style: 'MockQgsVectorLayer' object has no attribute 'saveNamedStyle'
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-124157392890816 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-06 18:23:20 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:100 | Thread-124157392890816 | Failed to generate QML style: 'MockQgsVectorLayer' object has no attribute 'saveNamedStyle'
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-124157392890816 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 18:23:20 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:100 | Thread-124157392890816 | Failed to generate QML style: 'MockQgsVectorLayer' object has no attribute 'saveNamedStyle'
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-124157392890816 | Loaded 0 interpretations from project
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: section_layer = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: section_layer_name = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-124157392890816 | Failed to restore layer for section_layer
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: buffer_dist = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: dem_layer = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: dem_layer_name = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-124157392890816 | Failed to restore layer for dem_layer
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: dem_band = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: scale = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: vert_exag = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: geol_layer = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: geol_layer_name = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-124157392890816 | Failed to restore layer for geol_layer
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: geol_field = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: struct_layer = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: struct_layer_name = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-124157392890816 | Failed to restore layer for struct_layer
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: struct_dip_field = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: struct_strike_field = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: dip_scale_factor = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: dh_collar_layer = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-124157392890816 | Failed to restore layer for dh_collar_layer
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: dh_collar_id = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: dh_use_geom = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: dh_collar_x = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: dh_collar_y = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: dh_collar_z = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: dh_collar_depth = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: dh_survey_layer = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-124157392890816 | Failed to restore layer for dh_survey_layer
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: dh_survey_id = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: dh_survey_depth = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: dh_survey_azim = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: dh_survey_incl = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: dh_interval_layer = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-124157392890816 | Failed to restore layer for dh_interval_layer
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: dh_interval_id = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: dh_interval_from = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: dh_interval_to = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: dh_interval_lith = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: last_output_dir = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: interp_custom_fields = 1.0
2026-01-06 18:23:20 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:176 | Thread-124157392890816 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: show_topo = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: show_geol = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: show_struct = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: show_drillholes = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: show_interpretations = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: auto_lod = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: adaptive_sampling = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: max_points = 1.0
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-124157392890816 | Settings loaded successfully from Project/Global config
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:447 | Thread-124157392890816 | Cache cleared by user
2026-01-06 18:23:20 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-124157392890816 | Test Title: Test Message
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-124157392890816 | Test Title: Test Message
2026-01-06 18:23:20 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-124157392890816 | Test Title: Test Message
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-124157392890816 | CRITICAL_OP: finalize_polygon | points=2
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-124157392890816 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-06 18:23:20 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-124157392890816 | finalize_polygon() aborted - less than 3 points
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-124157392890816 | CRITICAL_OP: finalize_polygon | points=3
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-124157392890816 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-124157392890816 | finalize_polygon() - emitting polygonFinished signal for e42fb1fd-b96c-41b1-bcf1-6b7ecf693cb7
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-124157392890816 | Interpretation polygon finalized with 3 vertices, ID: e42fb1fd-b96c-41b1-bcf1-6b7ecf693cb7
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-124157392890816 | finalize_polygon() completed
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-124157392890816 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-124157392890816 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-124157392890816 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-124157392890816 | ProfileInterpretationTool.reset() completed
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-124157392890816 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-124157392890816 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-124157392890816 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-124157392890816 | ProfileInterpretationTool.reset() completed
2026-01-06 18:23:20 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-124157392890816 | Failed to create locator for layer layer1: mock error
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-124157392890816 | ProfileInterpretationTool.activate() called
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-124157392890816 | ProfileInterpretationTool activated successfully
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-124157392890816 | ProfileInterpretationTool.deactivate() called
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-124157392890816 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-124157392890816 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-124157392890816 | ProfileInterpretationTool.reset() completed
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-124157392890816 | ProfileInterpretationTool deactivated successfully
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: buffer_dist = 100.5
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-124157392890816 | Setting saved to project: test_layer = id_123
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-124157392890816 | Setting saved to project: test_layer_name = RealName
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124157392890816 | Global setting fallback: test_layer = 1.0
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:363 | Thread-124157392890816 | Project setting hit: test_layer_name = RealName
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:420 | Thread-124157392890816 | Restoring layer: test_layer -> RealName
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-124157392890816 | Point 1 added: 0.00, 0.00
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-124157392890816 | Point 2 added: 100.00, 100.00
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-124157392890816 | Point 1 added: 50.00, 50.00
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-124157392890816 | reset() called, finalized=False
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-124157392890816 | finalize_measurement called with 1 points
2026-01-06 18:23:20 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-124157392890816 | Cannot finalize measurement with less than 2 points
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-124157392890816 | finalize_measurement called with 2 points
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-124157392890816 | Setting finalized = True
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124157392890816 | Measurement finalized: 2 points, 100.00m total distance
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-124157392890816 | Switching to pan tool to stop measurement
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-124157392890816 | Pan tool activated - measurement should be frozen
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-124157392890816 | Ignoring click - measurement is finalized
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-124157392890816 | finalize_measurement called with 2 points
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-124157392890816 | Setting finalized = True
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124157392890816 | Measurement finalized: 2 points, 100.00m total distance
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-124157392890816 | Switching to pan tool to stop measurement
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-124157392890816 | Pan tool activated - measurement should be frozen
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-124157392890816 | reset() called, finalized=False
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-124157392890816 | reset() called, finalized=False
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-124157392890816 | reset() called, finalized=True
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-124157392890816 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-124157392890816 | reset() called, finalized=False
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-124157392890816 | finalize_measurement called with 2 points
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-124157392890816 | Setting finalized = True
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124157392890816 | Measurement finalized: 2 points, 100.00m total distance
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-124157392890816 | Rubber band redrawn with final points only
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-124157392890816 | Switching to pan tool to stop measurement
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-124157392890816 | Pan tool activated - measurement should be frozen
2026-01-06 18:23:20 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-124157392890816 | Failed to create locator for layer layer1: mock error
2026-01-06 18:23:20 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-124157392890816 | Failed to create locator for layer l2: fail
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-124157392890816 | ProfileMeasureTool activated
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-124157392890816 | reset() called, finalized=False
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-124157392890816 | ProfileMeasureTool deactivated
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-124157392890816 | Thread processing canceled.
2026-01-06 18:23:20 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-124157392890816 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-124157392890816 | Canceling 2 active threads...
2026-01-06 18:23:20 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-124157392890816 | Parallel processing error: Test error
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-124157392890816 | Canceling 2 active threads...
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124157392890816 | create_drillhole_trace_layer called with 1 holes
2026-01-06 18:23:20 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-124157392890816 | Adding 1 drillhole trace features to layer
2026-01-06 18:23:20 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-124157392890816 | Failed to create memory layer: Fail
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124157392890816 | create_drillhole_trace_layer called with 0 holes
2026-01-06 18:23:20 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-124157392890816 | No drillhole data provided for trace layer
2026-01-06 18:23:20 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124157392890816 | create_drillhole_trace_layer called with 1 holes
2026-01-06 18:23:21 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-124157392890816 | Skipping hole H1: insufficient trace points (1)
2026-01-06 18:23:21 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-124157392890816 | Adding 0 drillhole trace features to layer
2026-01-06 18:23:21 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124157392890816 | create_drillhole_trace_layer called with 1 holes
2026-01-06 18:23:21 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124157392890816 | render() called
2026-01-06 18:23:21 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-124157392890816 | No valid layers to render
2026-01-06 18:23:21 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124157392890816 | render() called
2026-01-06 18:23:21 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-124157392890816 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-06 18:23:21 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124157392890816 | render() called
2026-01-06 18:23:21 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124157392890816 | render() called
2026-01-06 18:23:21 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124157392890816 | render() called
2026-01-06 18:23:21 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-124157392890816 | No valid layers to render
2026-01-06 18:23:21 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124157392890816 | render() called
2026-01-06 18:23:21 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124157392890816 | render() called
2026-01-06 18:23:21 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-124157392890816 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-06 18:23:21 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-124157392890816 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-06 18:23:21 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-124157392890816 | Point 1 added: 0.00, 0.00
2026-01-06 18:23:21 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-124157392890816 | Point 2 added: 10.00, 10.00
2026-01-06 18:23:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-124157392890816 | finalize_measurement called with 2 points
2026-01-06 18:23:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-124157392890816 | Setting finalized = True
2026-01-06 18:23:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124157392890816 | Measurement finalized: 2 points, 14.14m total distance
2026-01-06 18:23:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-124157392890816 | Rubber band redrawn with final points only
2026-01-06 18:23:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-124157392890816 | Switching to pan tool to stop measurement
2026-01-06 18:23:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-124157392890816 | Pan tool activated - measurement should be frozen
2026-01-06 18:23:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-124157392890816 | reset() called, finalized=True
2026-01-06 18:23:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-124157392890816 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-06 18:23:21 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-124157392890816 | Point 1 added: 0.00, 0.00
2026-01-06 18:23:21 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-124157392890816 | Point 2 added: 100.00, 100.00
2026-01-06 18:23:21 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124157392890816 | CacheService initialized (Default TTL: 3600s)
2026-01-06 18:23:21 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-124157392890816 | ProfileController initialized
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-124373160238016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-124373160238016 | Config set: SecInterp/scale = 50000.0
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-124373160238016 | Config set: SecInterp/vert_exag = 1.0
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-124373160238016 | Config set: SecInterp/buffer_dist = 100.0
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-124373160238016 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-124373160238016 | Config set: SecInterp/last_output_dir = 
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-124373160238016 | Config set: SecInterp/dpi = 300
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-124373160238016 | Config set: SecInterp/preview_width = 800
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-124373160238016 | Config set: SecInterp/preview_height = 600
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-124373160238016 | Config set: SecInterp/sampling_interval = 10.0
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-124373160238016 | Config set: SecInterp/export_quality = 95
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-124373160238016 | Config set: SecInterp/auto_lod = True
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-124373160238016 | Config set: SecInterp/max_preview_points = 10000
2026-01-06 18:36:11 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-124373160238016 | Configuration reset to defaults
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-124373160238016 | Config set: SecInterp/scale = 200.0
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124373160238016 | CacheService initialized (Default TTL: 3600s)
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124373160238016 | CacheService initialized (Default TTL: 3600s)
2026-01-06 18:36:11 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124373160238016 | CacheService initialized (Default TTL: 3600s)
2026-01-06 18:36:11 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-124373160238016 | Projecting collars from Test Layer with buffer 50.0m
2026-01-06 18:36:11 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-124373160238016 | No collars found within buffer area.
2026-01-06 18:36:11 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-124373160238016 | Projecting collars from Test Layer with buffer 50.0m
2026-01-06 18:36:11 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-124373160238016 | DrillholeService.project_collars END: Found 1 collars.
2026-01-06 18:36:11 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-124373160238016 | ✓ Saving profile axes...
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-124373160238016 | ✓ Saving topographic profile...
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-124373160238016 | ✓ Saving interpretation data...
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-124373160238016 | 3D Export features are restricted for this user.
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-124373160238016 | ✓ Saving profile axes...
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-124373160238016 | ✓ Saving topographic profile...
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-124373160238016 | ✓ Saving interpretation data...
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-124373160238016 | ✓ Saving 3D interpretation data...
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-124373160238016 | ✓ Saving profile axes...
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-124373160238016 | ✓ Saving topographic profile...
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-124373160238016 | ✓ Saving geological profile...
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-124373160238016 | ✓ Saving structural profile...
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-124373160238016 | ✓ Saving drillhole data...
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-124373160238016 | ✓ Saving interpretation data...
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-124373160238016 | Access denied for restricted feature: 3D Export
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-124373160238016 | 3D Export features are restricted for this user.
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-124373160238016 | ✓ Saving profile axes...
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-124373160238016 | ✓ Saving topographic profile...
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-124373160238016 | No interpretations provided for export.
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-124373160238016 | ✓ Saving profile axes...
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-124373160238016 | ✓ Saving drillhole data...
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-124373160238016 | ✓ Saving geological profile...
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-124373160238016 | ✓ Saving interpretation data...
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-124373160238016 | ✓ Saving 3D interpretation data...
2026-01-06 18:36:12 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-124373160238016 | Invalid section line layer, skipping 3D export.
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-124373160238016 | ✓ Saving interpretation data...
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-124373160238016 | ✓ Saving structural profile...
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-124373160238016 | ✓ Saving topographic profile...
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-124373160238016 | Generating master profile with interval=10.00
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-124373160238016 | Generated 1 geological segments
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-124373160238016 | Generating master profile with interval=50.00
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-124373160238016 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-124373160238016 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-124373160238016 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-124373160238016 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-124373160238016 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-124373160238016 | Running geometry operation: test
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-124373160238016 | Generated 1 drillhole traces
2026-01-06 18:36:12 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-124373160238016 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-06 18:36:12 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-124373160238016 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-124373160238016 | Generated 1 drillhole traces
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-124373160238016 | Drillhole preview skipped: No Collar ID field selected.
2026-01-06 18:36:12 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-124373160238016 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-06 18:36:12 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-124373160238016 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-06 18:36:12 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-124373160238016 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-06 18:36:12 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-124373160238016 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-06 18:36:12 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-124373160238016 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-124373160238016 | Analyzing structures in Structure Layer with buffer 10m
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-124373160238016 | Processed 1 structural measurements from Structure Layer
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-124373160238016 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-124373160238016 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-124373160238016 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-124373160238016 | Loaded 0 interpretations from project
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: section_layer = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: section_layer_name = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-124373160238016 | Failed to restore layer for section_layer
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: buffer_dist = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: dem_layer = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: dem_layer_name = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-124373160238016 | Failed to restore layer for dem_layer
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: dem_band = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: scale = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: vert_exag = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: geol_layer = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: geol_layer_name = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-124373160238016 | Failed to restore layer for geol_layer
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: geol_field = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: struct_layer = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: struct_layer_name = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-124373160238016 | Failed to restore layer for struct_layer
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: struct_dip_field = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: struct_strike_field = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: dip_scale_factor = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: dh_collar_layer = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-124373160238016 | Failed to restore layer for dh_collar_layer
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: dh_collar_id = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: dh_use_geom = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: dh_collar_x = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: dh_collar_y = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: dh_collar_z = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: dh_collar_depth = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: dh_survey_layer = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-124373160238016 | Failed to restore layer for dh_survey_layer
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: dh_survey_id = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: dh_survey_depth = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: dh_survey_azim = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: dh_survey_incl = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: dh_interval_layer = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-124373160238016 | Failed to restore layer for dh_interval_layer
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: dh_interval_id = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: dh_interval_from = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: dh_interval_to = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: dh_interval_lith = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: last_output_dir = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: interp_custom_fields = 1.0
2026-01-06 18:36:12 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:176 | Thread-124373160238016 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: show_topo = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: show_geol = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: show_struct = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: show_drillholes = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: show_interpretations = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: auto_lod = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: adaptive_sampling = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: max_points = 1.0
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-124373160238016 | Settings loaded successfully from Project/Global config
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:447 | Thread-124373160238016 | Cache cleared by user
2026-01-06 18:36:12 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-124373160238016 | Test Title: Test Message
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-124373160238016 | Test Title: Test Message
2026-01-06 18:36:12 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-124373160238016 | Test Title: Test Message
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-124373160238016 | CRITICAL_OP: finalize_polygon | points=2
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-124373160238016 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-06 18:36:12 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-124373160238016 | finalize_polygon() aborted - less than 3 points
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-124373160238016 | CRITICAL_OP: finalize_polygon | points=3
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-124373160238016 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-124373160238016 | finalize_polygon() - emitting polygonFinished signal for f36ab55b-d5da-4d28-b976-e360a9ebc6dd
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-124373160238016 | Interpretation polygon finalized with 3 vertices, ID: f36ab55b-d5da-4d28-b976-e360a9ebc6dd
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-124373160238016 | finalize_polygon() completed
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-124373160238016 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-124373160238016 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-124373160238016 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-124373160238016 | ProfileInterpretationTool.reset() completed
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-124373160238016 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-124373160238016 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-124373160238016 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-124373160238016 | ProfileInterpretationTool.reset() completed
2026-01-06 18:36:12 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-124373160238016 | Failed to create locator for layer layer1: mock error
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-124373160238016 | ProfileInterpretationTool.activate() called
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-124373160238016 | ProfileInterpretationTool activated successfully
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-124373160238016 | ProfileInterpretationTool.deactivate() called
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-124373160238016 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-124373160238016 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-124373160238016 | ProfileInterpretationTool.reset() completed
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-124373160238016 | ProfileInterpretationTool deactivated successfully
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: buffer_dist = 100.5
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-124373160238016 | Setting saved to project: test_layer = id_123
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-124373160238016 | Setting saved to project: test_layer_name = RealName
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124373160238016 | Global setting fallback: test_layer = 1.0
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:363 | Thread-124373160238016 | Project setting hit: test_layer_name = RealName
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:420 | Thread-124373160238016 | Restoring layer: test_layer -> RealName
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-124373160238016 | Point 1 added: 0.00, 0.00
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-124373160238016 | Point 2 added: 100.00, 100.00
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-124373160238016 | Point 1 added: 50.00, 50.00
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-124373160238016 | reset() called, finalized=False
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-124373160238016 | finalize_measurement called with 1 points
2026-01-06 18:36:12 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-124373160238016 | Cannot finalize measurement with less than 2 points
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-124373160238016 | finalize_measurement called with 2 points
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-124373160238016 | Setting finalized = True
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124373160238016 | Measurement finalized: 2 points, 100.00m total distance
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-124373160238016 | Switching to pan tool to stop measurement
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-124373160238016 | Pan tool activated - measurement should be frozen
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-124373160238016 | Ignoring click - measurement is finalized
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-124373160238016 | finalize_measurement called with 2 points
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-124373160238016 | Setting finalized = True
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124373160238016 | Measurement finalized: 2 points, 100.00m total distance
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-124373160238016 | Switching to pan tool to stop measurement
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-124373160238016 | Pan tool activated - measurement should be frozen
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-124373160238016 | reset() called, finalized=False
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-124373160238016 | reset() called, finalized=False
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-124373160238016 | reset() called, finalized=True
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-124373160238016 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-124373160238016 | reset() called, finalized=False
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-124373160238016 | finalize_measurement called with 2 points
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-124373160238016 | Setting finalized = True
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124373160238016 | Measurement finalized: 2 points, 100.00m total distance
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-124373160238016 | Rubber band redrawn with final points only
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-124373160238016 | Switching to pan tool to stop measurement
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-124373160238016 | Pan tool activated - measurement should be frozen
2026-01-06 18:36:12 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-124373160238016 | Failed to create locator for layer layer1: mock error
2026-01-06 18:36:12 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-124373160238016 | Failed to create locator for layer l2: fail
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-124373160238016 | ProfileMeasureTool activated
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-124373160238016 | reset() called, finalized=False
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-124373160238016 | ProfileMeasureTool deactivated
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-124373160238016 | Thread processing canceled.
2026-01-06 18:36:12 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-124373160238016 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-124373160238016 | Canceling 2 active threads...
2026-01-06 18:36:12 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-124373160238016 | Parallel processing error: Test error
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-124373160238016 | Canceling 2 active threads...
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124373160238016 | create_drillhole_trace_layer called with 1 holes
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-124373160238016 | Adding 1 drillhole trace features to layer
2026-01-06 18:36:12 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-124373160238016 | Failed to create memory layer: Fail
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124373160238016 | create_drillhole_trace_layer called with 0 holes
2026-01-06 18:36:12 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-124373160238016 | No drillhole data provided for trace layer
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124373160238016 | create_drillhole_trace_layer called with 1 holes
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-124373160238016 | Skipping hole H1: insufficient trace points (1)
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-124373160238016 | Adding 0 drillhole trace features to layer
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124373160238016 | create_drillhole_trace_layer called with 1 holes
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124373160238016 | render() called
2026-01-06 18:36:12 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-124373160238016 | No valid layers to render
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124373160238016 | render() called
2026-01-06 18:36:12 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-124373160238016 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124373160238016 | render() called
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124373160238016 | render() called
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124373160238016 | render() called
2026-01-06 18:36:12 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-124373160238016 | No valid layers to render
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124373160238016 | render() called
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124373160238016 | render() called
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-124373160238016 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-124373160238016 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-124373160238016 | Point 1 added: 0.00, 0.00
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-124373160238016 | Point 2 added: 10.00, 10.00
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-124373160238016 | finalize_measurement called with 2 points
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-124373160238016 | Setting finalized = True
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124373160238016 | Measurement finalized: 2 points, 14.14m total distance
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-124373160238016 | Rubber band redrawn with final points only
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-124373160238016 | Switching to pan tool to stop measurement
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-124373160238016 | Pan tool activated - measurement should be frozen
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-124373160238016 | reset() called, finalized=True
2026-01-06 18:36:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-124373160238016 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-124373160238016 | Point 1 added: 0.00, 0.00
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-124373160238016 | Point 2 added: 100.00, 100.00
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124373160238016 | CacheService initialized (Default TTL: 3600s)
2026-01-06 18:36:12 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-124373160238016 | ProfileController initialized
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-130606372514752 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-130606372514752 | Loaded 0 interpretations from project
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: section_layer = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: section_layer_name = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-130606372514752 | Failed to restore layer for section_layer
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: buffer_dist = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: dem_layer = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: dem_layer_name = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-130606372514752 | Failed to restore layer for dem_layer
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: dem_band = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: scale = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: vert_exag = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: geol_layer = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: geol_layer_name = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-130606372514752 | Failed to restore layer for geol_layer
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: geol_field = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: struct_layer = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: struct_layer_name = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-130606372514752 | Failed to restore layer for struct_layer
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: struct_dip_field = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: struct_strike_field = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: dip_scale_factor = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: dh_collar_layer = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-130606372514752 | Failed to restore layer for dh_collar_layer
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: dh_collar_id = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: dh_use_geom = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: dh_collar_x = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: dh_collar_y = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: dh_collar_z = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: dh_collar_depth = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: dh_survey_layer = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-130606372514752 | Failed to restore layer for dh_survey_layer
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: dh_survey_id = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: dh_survey_depth = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: dh_survey_azim = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: dh_survey_incl = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: dh_interval_layer = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-130606372514752 | Failed to restore layer for dh_interval_layer
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: dh_interval_id = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: dh_interval_from = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: dh_interval_to = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: dh_interval_lith = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: last_output_dir = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: interp_custom_fields = 1.0
2026-01-06 18:36:19 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:176 | Thread-130606372514752 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: show_topo = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: show_geol = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: show_struct = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: show_drillholes = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: show_interpretations = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: auto_lod = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: adaptive_sampling = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: max_points = 1.0
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-130606372514752 | Settings loaded successfully from Project/Global config
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:447 | Thread-130606372514752 | Cache cleared by user
2026-01-06 18:36:19 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-130606372514752 | Test Title: Test Message
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-130606372514752 | Test Title: Test Message
2026-01-06 18:36:19 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-130606372514752 | Test Title: Test Message
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-130606372514752 | CRITICAL_OP: finalize_polygon | points=2
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-130606372514752 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-06 18:36:19 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-130606372514752 | finalize_polygon() aborted - less than 3 points
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-130606372514752 | CRITICAL_OP: finalize_polygon | points=3
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-130606372514752 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-130606372514752 | finalize_polygon() - emitting polygonFinished signal for 43f1d494-dc55-40b9-8864-93d3fc961e2b
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-130606372514752 | Interpretation polygon finalized with 3 vertices, ID: 43f1d494-dc55-40b9-8864-93d3fc961e2b
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-130606372514752 | finalize_polygon() completed
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-130606372514752 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-130606372514752 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-130606372514752 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-130606372514752 | ProfileInterpretationTool.reset() completed
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-130606372514752 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-130606372514752 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-130606372514752 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-130606372514752 | ProfileInterpretationTool.reset() completed
2026-01-06 18:36:19 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-130606372514752 | Failed to create locator for layer layer1: mock error
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-130606372514752 | ProfileInterpretationTool.activate() called
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-130606372514752 | ProfileInterpretationTool activated successfully
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-130606372514752 | ProfileInterpretationTool.deactivate() called
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-130606372514752 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-130606372514752 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-130606372514752 | ProfileInterpretationTool.reset() completed
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-130606372514752 | ProfileInterpretationTool deactivated successfully
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: buffer_dist = 100.5
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-130606372514752 | Setting saved to project: test_layer = id_123
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-130606372514752 | Setting saved to project: test_layer_name = RealName
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-130606372514752 | Global setting fallback: test_layer = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:363 | Thread-130606372514752 | Project setting hit: test_layer_name = RealName
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:420 | Thread-130606372514752 | Restoring layer: test_layer -> RealName
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-130606372514752 | Point 1 added: 0.00, 0.00
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-130606372514752 | Point 2 added: 100.00, 100.00
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-130606372514752 | Point 1 added: 50.00, 50.00
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-130606372514752 | reset() called, finalized=False
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-130606372514752 | finalize_measurement called with 1 points
2026-01-06 18:36:19 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-130606372514752 | Cannot finalize measurement with less than 2 points
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-130606372514752 | finalize_measurement called with 2 points
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-130606372514752 | Setting finalized = True
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-130606372514752 | Measurement finalized: 2 points, 100.00m total distance
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-130606372514752 | Switching to pan tool to stop measurement
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-130606372514752 | Pan tool activated - measurement should be frozen
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-130606372514752 | Ignoring click - measurement is finalized
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-130606372514752 | finalize_measurement called with 2 points
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-130606372514752 | Setting finalized = True
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-130606372514752 | Measurement finalized: 2 points, 100.00m total distance
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-130606372514752 | Switching to pan tool to stop measurement
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-130606372514752 | Pan tool activated - measurement should be frozen
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-130606372514752 | reset() called, finalized=False
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-130606372514752 | reset() called, finalized=False
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-130606372514752 | reset() called, finalized=True
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-130606372514752 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-130606372514752 | reset() called, finalized=False
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-130606372514752 | finalize_measurement called with 2 points
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-130606372514752 | Setting finalized = True
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-130606372514752 | Measurement finalized: 2 points, 100.00m total distance
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-130606372514752 | Rubber band redrawn with final points only
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-130606372514752 | Switching to pan tool to stop measurement
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-130606372514752 | Pan tool activated - measurement should be frozen
2026-01-06 18:36:19 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-130606372514752 | Failed to create locator for layer layer1: mock error
2026-01-06 18:36:19 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-130606372514752 | Failed to create locator for layer l2: fail
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-130606372514752 | ProfileMeasureTool activated
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-130606372514752 | reset() called, finalized=False
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-130606372514752 | ProfileMeasureTool deactivated
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-130606372514752 | Thread processing canceled.
2026-01-06 18:36:19 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-130606372514752 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-130606372514752 | Canceling 2 active threads...
2026-01-06 18:36:19 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-130606372514752 | Parallel processing error: Test error
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-130606372514752 | Canceling 2 active threads...
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-130606372514752 | create_drillhole_trace_layer called with 1 holes
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-130606372514752 | Adding 1 drillhole trace features to layer
2026-01-06 18:36:19 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-130606372514752 | Failed to create memory layer: Fail
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-130606372514752 | create_drillhole_trace_layer called with 0 holes
2026-01-06 18:36:19 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-130606372514752 | No drillhole data provided for trace layer
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-130606372514752 | create_drillhole_trace_layer called with 1 holes
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-130606372514752 | Skipping hole H1: insufficient trace points (1)
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-130606372514752 | Adding 0 drillhole trace features to layer
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-130606372514752 | create_drillhole_trace_layer called with 1 holes
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130606372514752 | render() called
2026-01-06 18:36:19 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-130606372514752 | No valid layers to render
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130606372514752 | render() called
2026-01-06 18:36:19 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-130606372514752 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130606372514752 | render() called
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130606372514752 | render() called
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130606372514752 | render() called
2026-01-06 18:36:19 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-130606372514752 | No valid layers to render
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130606372514752 | render() called
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130606372514752 | render() called
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-123476187093952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-123476187093952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-123476187093952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-123476187093952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-123476187093952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-123476187093952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-123476187093952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-123476187093952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-123476187093952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-123476187093952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-123476187093952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-123476187093952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-123476187093952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-123476187093952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-123476187093952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-123476187093952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-123476187093952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-123476187093952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-123476187093952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-123476187093952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-123476187093952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-123476187093952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-123476187093952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123476187093952 | Config set: SecInterp/scale = 50000.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123476187093952 | Config set: SecInterp/vert_exag = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123476187093952 | Config set: SecInterp/buffer_dist = 100.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123476187093952 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123476187093952 | Config set: SecInterp/last_output_dir = 
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123476187093952 | Config set: SecInterp/dpi = 300
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123476187093952 | Config set: SecInterp/preview_width = 800
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123476187093952 | Config set: SecInterp/preview_height = 600
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123476187093952 | Config set: SecInterp/sampling_interval = 10.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123476187093952 | Config set: SecInterp/export_quality = 95
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123476187093952 | Config set: SecInterp/auto_lod = True
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123476187093952 | Config set: SecInterp/max_preview_points = 10000
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-123476187093952 | Configuration reset to defaults
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123476187093952 | Config set: SecInterp/scale = 200.0
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123476187093952 | CacheService initialized (Default TTL: 3600s)
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123476187093952 | CacheService initialized (Default TTL: 3600s)
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123476187093952 | CacheService initialized (Default TTL: 3600s)
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-123476187093952 | Projecting collars from Test Layer with buffer 50.0m
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-123476187093952 | No collars found within buffer area.
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-123476187093952 | Projecting collars from Test Layer with buffer 50.0m
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-123476187093952 | DrillholeService.project_collars END: Found 1 collars.
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-123476187093952 | ✓ Saving profile axes...
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-123476187093952 | ✓ Saving topographic profile...
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-123476187093952 | ✓ Saving interpretation data...
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-123476187093952 | 3D Export features are restricted for this user.
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-123476187093952 | ✓ Saving profile axes...
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-123476187093952 | ✓ Saving topographic profile...
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-123476187093952 | ✓ Saving interpretation data...
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-123476187093952 | ✓ Saving 3D interpretation data...
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-123476187093952 | ✓ Saving profile axes...
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-123476187093952 | ✓ Saving topographic profile...
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-123476187093952 | ✓ Saving geological profile...
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-123476187093952 | ✓ Saving structural profile...
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-123476187093952 | ✓ Saving drillhole data...
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-123476187093952 | ✓ Saving interpretation data...
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-123476187093952 | Access denied for restricted feature: 3D Export
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-123476187093952 | 3D Export features are restricted for this user.
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-123476187093952 | ✓ Saving profile axes...
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-123476187093952 | ✓ Saving topographic profile...
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-123476187093952 | No interpretations provided for export.
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-123476187093952 | ✓ Saving profile axes...
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-123476187093952 | ✓ Saving drillhole data...
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-123476187093952 | ✓ Saving geological profile...
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-123476187093952 | ✓ Saving interpretation data...
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-123476187093952 | ✓ Saving 3D interpretation data...
2026-01-06 18:36:19 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-123476187093952 | Invalid section line layer, skipping 3D export.
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-123476187093952 | ✓ Saving interpretation data...
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-123476187093952 | ✓ Saving structural profile...
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-123476187093952 | ✓ Saving topographic profile...
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-123476187093952 | Generating master profile with interval=10.00
2026-01-06 18:36:19 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-123476187093952 | Generated 1 geological segments
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-123476187093952 | Generating master profile with interval=50.00
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-123476187093952 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-123476187093952 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-123476187093952 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-123476187093952 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-123476187093952 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-06 18:36:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-123476187093952 | Running geometry operation: test
2026-01-06 18:36:20 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-123476187093952 | Generated 1 drillhole traces
2026-01-06 18:36:20 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-123476187093952 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-06 18:36:20 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-123476187093952 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-06 18:36:20 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-123476187093952 | Generated 1 drillhole traces
2026-01-06 18:36:20 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-123476187093952 | Drillhole preview skipped: No Collar ID field selected.
2026-01-06 18:36:20 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-123476187093952 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-06 18:36:20 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-123476187093952 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-06 18:36:20 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-123476187093952 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-06 18:36:20 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-123476187093952 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-06 18:36:20 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-123476187093952 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-06 18:36:20 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-123476187093952 | Analyzing structures in Structure Layer with buffer 10m
2026-01-06 18:36:20 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-123476187093952 | Processed 1 structural measurements from Structure Layer
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-133622866725824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133622866725824 | Config set: SecInterp/scale = 50000.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133622866725824 | Config set: SecInterp/vert_exag = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133622866725824 | Config set: SecInterp/buffer_dist = 100.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133622866725824 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133622866725824 | Config set: SecInterp/last_output_dir = 
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133622866725824 | Config set: SecInterp/dpi = 300
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133622866725824 | Config set: SecInterp/preview_width = 800
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133622866725824 | Config set: SecInterp/preview_height = 600
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133622866725824 | Config set: SecInterp/sampling_interval = 10.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133622866725824 | Config set: SecInterp/export_quality = 95
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133622866725824 | Config set: SecInterp/auto_lod = True
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133622866725824 | Config set: SecInterp/max_preview_points = 10000
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-133622866725824 | Configuration reset to defaults
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133622866725824 | Config set: SecInterp/scale = 200.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133622866725824 | CacheService initialized (Default TTL: 3600s)
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133622866725824 | CacheService initialized (Default TTL: 3600s)
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133622866725824 | CacheService initialized (Default TTL: 3600s)
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-133622866725824 | Projecting collars from Test Layer with buffer 50.0m
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-133622866725824 | No collars found within buffer area.
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-133622866725824 | Projecting collars from Test Layer with buffer 50.0m
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-133622866725824 | DrillholeService.project_collars END: Found 1 collars.
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-133622866725824 | ✓ Saving profile axes...
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-133622866725824 | ✓ Saving topographic profile...
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-133622866725824 | ✓ Saving interpretation data...
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-133622866725824 | 3D Export features are restricted for this user.
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-133622866725824 | ✓ Saving profile axes...
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-133622866725824 | ✓ Saving topographic profile...
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-133622866725824 | ✓ Saving interpretation data...
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-133622866725824 | ✓ Saving 3D interpretation data...
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-133622866725824 | ✓ Saving profile axes...
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-133622866725824 | ✓ Saving topographic profile...
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-133622866725824 | ✓ Saving geological profile...
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-133622866725824 | ✓ Saving structural profile...
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-133622866725824 | ✓ Saving drillhole data...
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-133622866725824 | ✓ Saving interpretation data...
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-133622866725824 | Access denied for restricted feature: 3D Export
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-133622866725824 | 3D Export features are restricted for this user.
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-133622866725824 | ✓ Saving profile axes...
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-133622866725824 | ✓ Saving topographic profile...
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-133622866725824 | No interpretations provided for export.
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-133622866725824 | ✓ Saving profile axes...
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-133622866725824 | ✓ Saving drillhole data...
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-133622866725824 | ✓ Saving geological profile...
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-133622866725824 | ✓ Saving interpretation data...
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-133622866725824 | ✓ Saving 3D interpretation data...
2026-01-06 19:58:32 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-133622866725824 | Invalid section line layer, skipping 3D export.
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-133622866725824 | ✓ Saving interpretation data...
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-133622866725824 | ✓ Saving structural profile...
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-133622866725824 | ✓ Saving topographic profile...
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-133622866725824 | Generating master profile with interval=10.00
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-133622866725824 | Generated 1 geological segments
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-133622866725824 | Generating master profile with interval=50.00
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-133622866725824 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-133622866725824 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-133622866725824 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-133622866725824 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-133622866725824 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-133622866725824 | Running geometry operation: test
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-133622866725824 | Generated 1 drillhole traces
2026-01-06 19:58:32 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-133622866725824 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-06 19:58:32 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-133622866725824 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-133622866725824 | Generated 1 drillhole traces
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-133622866725824 | Drillhole preview skipped: No Collar ID field selected.
2026-01-06 19:58:32 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-133622866725824 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-06 19:58:32 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-133622866725824 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-06 19:58:32 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-133622866725824 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-06 19:58:32 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-133622866725824 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-06 19:58:32 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-133622866725824 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-133622866725824 | Analyzing structures in Structure Layer with buffer 10m
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-133622866725824 | Processed 1 structural measurements from Structure Layer
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-133622866725824 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-133622866725824 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-133622866725824 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-133622866725824 | Loaded 0 interpretations from project
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: section_layer = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: section_layer_name = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133622866725824 | Failed to restore layer for section_layer
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: buffer_dist = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: dem_layer = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: dem_layer_name = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133622866725824 | Failed to restore layer for dem_layer
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: dem_band = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: scale = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: vert_exag = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: geol_layer = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: geol_layer_name = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133622866725824 | Failed to restore layer for geol_layer
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: geol_field = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: struct_layer = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: struct_layer_name = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133622866725824 | Failed to restore layer for struct_layer
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: struct_dip_field = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: struct_strike_field = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: dip_scale_factor = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: dh_collar_layer = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133622866725824 | Failed to restore layer for dh_collar_layer
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: dh_collar_id = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: dh_use_geom = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: dh_collar_x = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: dh_collar_y = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: dh_collar_z = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: dh_collar_depth = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: dh_survey_layer = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133622866725824 | Failed to restore layer for dh_survey_layer
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: dh_survey_id = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: dh_survey_depth = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: dh_survey_azim = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: dh_survey_incl = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: dh_interval_layer = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133622866725824 | Failed to restore layer for dh_interval_layer
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: dh_interval_id = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: dh_interval_from = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: dh_interval_to = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: dh_interval_lith = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: last_output_dir = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: interp_custom_fields = 1.0
2026-01-06 19:58:32 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:176 | Thread-133622866725824 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: show_topo = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: show_geol = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: show_struct = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: show_drillholes = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: show_interpretations = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: auto_lod = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: adaptive_sampling = 1.0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: max_points = 1.0
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-133622866725824 | Settings loaded successfully from Project/Global config
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:447 | Thread-133622866725824 | Cache cleared by user
2026-01-06 19:58:32 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-133622866725824 | Test Title: Test Message
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-133622866725824 | Test Title: Test Message
2026-01-06 19:58:32 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-133622866725824 | Test Title: Test Message
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-133622866725824 | CRITICAL_OP: finalize_polygon | points=2
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-133622866725824 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-06 19:58:32 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-133622866725824 | finalize_polygon() aborted - less than 3 points
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-133622866725824 | CRITICAL_OP: finalize_polygon | points=3
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-133622866725824 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-133622866725824 | finalize_polygon() - emitting polygonFinished signal for f7bc1816-540d-4b3c-b719-71a58c90912e
2026-01-06 19:58:32 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-133622866725824 | Interpretation polygon finalized with 3 vertices, ID: f7bc1816-540d-4b3c-b719-71a58c90912e
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-133622866725824 | finalize_polygon() completed
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-133622866725824 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-133622866725824 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-133622866725824 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-133622866725824 | ProfileInterpretationTool.reset() completed
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-133622866725824 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-133622866725824 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-133622866725824 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-06 19:58:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-133622866725824 | ProfileInterpretationTool.reset() completed
2026-01-06 19:58:32 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-133622866725824 | Failed to create locator for layer layer1: mock error
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-133622866725824 | ProfileInterpretationTool.activate() called
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-133622866725824 | ProfileInterpretationTool activated successfully
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-133622866725824 | ProfileInterpretationTool.deactivate() called
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-133622866725824 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-133622866725824 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-133622866725824 | ProfileInterpretationTool.reset() completed
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-133622866725824 | ProfileInterpretationTool deactivated successfully
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: buffer_dist = 100.5
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-133622866725824 | Setting saved to project: test_layer = id_123
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-133622866725824 | Setting saved to project: test_layer_name = RealName
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133622866725824 | Global setting fallback: test_layer = 1.0
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:363 | Thread-133622866725824 | Project setting hit: test_layer_name = RealName
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:420 | Thread-133622866725824 | Restoring layer: test_layer -> RealName
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-133622866725824 | Point 1 added: 0.00, 0.00
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-133622866725824 | Point 2 added: 100.00, 100.00
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-133622866725824 | Point 1 added: 50.00, 50.00
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133622866725824 | reset() called, finalized=False
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-133622866725824 | finalize_measurement called with 1 points
2026-01-06 19:58:33 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-133622866725824 | Cannot finalize measurement with less than 2 points
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-133622866725824 | finalize_measurement called with 2 points
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-133622866725824 | Setting finalized = True
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133622866725824 | Measurement finalized: 2 points, 100.00m total distance
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-133622866725824 | Switching to pan tool to stop measurement
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-133622866725824 | Pan tool activated - measurement should be frozen
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-133622866725824 | Ignoring click - measurement is finalized
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-133622866725824 | finalize_measurement called with 2 points
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-133622866725824 | Setting finalized = True
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133622866725824 | Measurement finalized: 2 points, 100.00m total distance
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-133622866725824 | Switching to pan tool to stop measurement
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-133622866725824 | Pan tool activated - measurement should be frozen
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133622866725824 | reset() called, finalized=False
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133622866725824 | reset() called, finalized=False
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133622866725824 | reset() called, finalized=True
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-133622866725824 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133622866725824 | reset() called, finalized=False
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-133622866725824 | finalize_measurement called with 2 points
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-133622866725824 | Setting finalized = True
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133622866725824 | Measurement finalized: 2 points, 100.00m total distance
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-133622866725824 | Rubber band redrawn with final points only
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-133622866725824 | Switching to pan tool to stop measurement
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-133622866725824 | Pan tool activated - measurement should be frozen
2026-01-06 19:58:33 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-133622866725824 | Failed to create locator for layer layer1: mock error
2026-01-06 19:58:33 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-133622866725824 | Failed to create locator for layer l2: fail
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-133622866725824 | ProfileMeasureTool activated
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133622866725824 | reset() called, finalized=False
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-133622866725824 | ProfileMeasureTool deactivated
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-133622866725824 | Thread processing canceled.
2026-01-06 19:58:33 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-133622866725824 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-133622866725824 | Canceling 2 active threads...
2026-01-06 19:58:33 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-133622866725824 | Parallel processing error: Test error
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-133622866725824 | Canceling 2 active threads...
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133622866725824 | create_drillhole_trace_layer called with 1 holes
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-133622866725824 | Adding 1 drillhole trace features to layer
2026-01-06 19:58:33 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-133622866725824 | Failed to create memory layer: Fail
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133622866725824 | create_drillhole_trace_layer called with 0 holes
2026-01-06 19:58:33 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-133622866725824 | No drillhole data provided for trace layer
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133622866725824 | create_drillhole_trace_layer called with 1 holes
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-133622866725824 | Skipping hole H1: insufficient trace points (1)
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-133622866725824 | Adding 0 drillhole trace features to layer
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133622866725824 | create_drillhole_trace_layer called with 1 holes
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133622866725824 | render() called
2026-01-06 19:58:33 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-133622866725824 | No valid layers to render
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133622866725824 | render() called
2026-01-06 19:58:33 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-133622866725824 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133622866725824 | render() called
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133622866725824 | render() called
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133622866725824 | render() called
2026-01-06 19:58:33 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-133622866725824 | No valid layers to render
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133622866725824 | render() called
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133622866725824 | render() called
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-133622866725824 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-133622866725824 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-133622866725824 | Point 1 added: 0.00, 0.00
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-133622866725824 | Point 2 added: 10.00, 10.00
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-133622866725824 | finalize_measurement called with 2 points
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-133622866725824 | Setting finalized = True
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133622866725824 | Measurement finalized: 2 points, 14.14m total distance
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-133622866725824 | Rubber band redrawn with final points only
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-133622866725824 | Switching to pan tool to stop measurement
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-133622866725824 | Pan tool activated - measurement should be frozen
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133622866725824 | reset() called, finalized=True
2026-01-06 19:58:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-133622866725824 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-133622866725824 | Point 1 added: 0.00, 0.00
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-133622866725824 | Point 2 added: 100.00, 100.00
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133622866725824 | CacheService initialized (Default TTL: 3600s)
2026-01-06 19:58:33 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-133622866725824 | ProfileController initialized
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-129404791569344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129404791569344 | Config set: SecInterp/scale = 50000.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129404791569344 | Config set: SecInterp/vert_exag = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129404791569344 | Config set: SecInterp/buffer_dist = 100.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129404791569344 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129404791569344 | Config set: SecInterp/last_output_dir = 
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129404791569344 | Config set: SecInterp/dpi = 300
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129404791569344 | Config set: SecInterp/preview_width = 800
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129404791569344 | Config set: SecInterp/preview_height = 600
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129404791569344 | Config set: SecInterp/sampling_interval = 10.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129404791569344 | Config set: SecInterp/export_quality = 95
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129404791569344 | Config set: SecInterp/auto_lod = True
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129404791569344 | Config set: SecInterp/max_preview_points = 10000
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-129404791569344 | Configuration reset to defaults
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129404791569344 | Config set: SecInterp/scale = 200.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-129404791569344 | CacheService initialized (Default TTL: 3600s)
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-129404791569344 | CacheService initialized (Default TTL: 3600s)
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-129404791569344 | CacheService initialized (Default TTL: 3600s)
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-129404791569344 | Projecting collars from Test Layer with buffer 50.0m
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-129404791569344 | No collars found within buffer area.
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-129404791569344 | Projecting collars from Test Layer with buffer 50.0m
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-129404791569344 | DrillholeService.project_collars END: Found 1 collars.
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129404791569344 | ✓ Saving profile axes...
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-129404791569344 | ✓ Saving topographic profile...
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129404791569344 | ✓ Saving interpretation data...
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-129404791569344 | 3D Export features are restricted for this user.
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129404791569344 | ✓ Saving profile axes...
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-129404791569344 | ✓ Saving topographic profile...
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129404791569344 | ✓ Saving interpretation data...
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-129404791569344 | ✓ Saving 3D interpretation data...
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129404791569344 | ✓ Saving profile axes...
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-129404791569344 | ✓ Saving topographic profile...
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-129404791569344 | ✓ Saving geological profile...
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-129404791569344 | ✓ Saving structural profile...
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-129404791569344 | ✓ Saving drillhole data...
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129404791569344 | ✓ Saving interpretation data...
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-129404791569344 | Access denied for restricted feature: 3D Export
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-129404791569344 | 3D Export features are restricted for this user.
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129404791569344 | ✓ Saving profile axes...
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-129404791569344 | ✓ Saving topographic profile...
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-129404791569344 | No interpretations provided for export.
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129404791569344 | ✓ Saving profile axes...
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-129404791569344 | ✓ Saving drillhole data...
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-129404791569344 | ✓ Saving geological profile...
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129404791569344 | ✓ Saving interpretation data...
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-129404791569344 | ✓ Saving 3D interpretation data...
2026-01-06 19:59:24 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-129404791569344 | Invalid section line layer, skipping 3D export.
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129404791569344 | ✓ Saving interpretation data...
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-129404791569344 | ✓ Saving structural profile...
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-129404791569344 | ✓ Saving topographic profile...
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-129404791569344 | Generating master profile with interval=10.00
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-129404791569344 | Generated 1 geological segments
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-129404791569344 | Generating master profile with interval=50.00
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-129404791569344 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-129404791569344 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-129404791569344 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-129404791569344 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-129404791569344 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-129404791569344 | Running geometry operation: test
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-129404791569344 | Generated 1 drillhole traces
2026-01-06 19:59:24 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-129404791569344 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-06 19:59:24 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-129404791569344 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-129404791569344 | Generated 1 drillhole traces
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-129404791569344 | Drillhole preview skipped: No Collar ID field selected.
2026-01-06 19:59:24 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:61 | Thread-129404791569344 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-06 19:59:24 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:97 | Thread-129404791569344 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-06 19:59:24 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:166 | Thread-129404791569344 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-06 19:59:24 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:272 | Thread-129404791569344 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 261, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 157, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 89, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 54, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-06 19:59:24 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-129404791569344 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-129404791569344 | Analyzing structures in Structure Layer with buffer 10m
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-129404791569344 | Processed 1 structural measurements from Structure Layer
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-129404791569344 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-129404791569344 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-129404791569344 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-129404791569344 | Loaded 0 interpretations from project
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: section_layer = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: section_layer_name = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-129404791569344 | Failed to restore layer for section_layer
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: buffer_dist = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: dem_layer = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: dem_layer_name = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-129404791569344 | Failed to restore layer for dem_layer
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: dem_band = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: scale = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: vert_exag = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: geol_layer = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: geol_layer_name = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-129404791569344 | Failed to restore layer for geol_layer
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: geol_field = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: struct_layer = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: struct_layer_name = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-129404791569344 | Failed to restore layer for struct_layer
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: struct_dip_field = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: struct_strike_field = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: dip_scale_factor = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: dh_collar_layer = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-129404791569344 | Failed to restore layer for dh_collar_layer
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: dh_collar_id = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: dh_use_geom = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: dh_collar_x = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: dh_collar_y = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: dh_collar_z = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: dh_collar_depth = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: dh_survey_layer = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-129404791569344 | Failed to restore layer for dh_survey_layer
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: dh_survey_id = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: dh_survey_depth = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: dh_survey_azim = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: dh_survey_incl = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: dh_interval_layer = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-129404791569344 | Failed to restore layer for dh_interval_layer
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: dh_interval_id = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: dh_interval_from = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: dh_interval_to = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: dh_interval_lith = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: last_output_dir = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: interp_custom_fields = 1.0
2026-01-06 19:59:24 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:176 | Thread-129404791569344 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: show_topo = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: show_geol = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: show_struct = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: show_drillholes = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: show_interpretations = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: auto_lod = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: adaptive_sampling = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: max_points = 1.0
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-129404791569344 | Settings loaded successfully from Project/Global config
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:447 | Thread-129404791569344 | Cache cleared by user
2026-01-06 19:59:24 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-129404791569344 | Test Title: Test Message
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-129404791569344 | Test Title: Test Message
2026-01-06 19:59:24 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-129404791569344 | Test Title: Test Message
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-129404791569344 | CRITICAL_OP: finalize_polygon | points=2
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-129404791569344 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-06 19:59:24 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-129404791569344 | finalize_polygon() aborted - less than 3 points
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-129404791569344 | CRITICAL_OP: finalize_polygon | points=3
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-129404791569344 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-129404791569344 | finalize_polygon() - emitting polygonFinished signal for 1c1a2471-2664-4d67-b9fe-fef50124abb4
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-129404791569344 | Interpretation polygon finalized with 3 vertices, ID: 1c1a2471-2664-4d67-b9fe-fef50124abb4
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-129404791569344 | finalize_polygon() completed
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-129404791569344 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-129404791569344 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-129404791569344 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-129404791569344 | ProfileInterpretationTool.reset() completed
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-129404791569344 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-129404791569344 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-129404791569344 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-129404791569344 | ProfileInterpretationTool.reset() completed
2026-01-06 19:59:24 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-129404791569344 | Failed to create locator for layer layer1: mock error
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-129404791569344 | ProfileInterpretationTool.activate() called
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-129404791569344 | ProfileInterpretationTool activated successfully
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-129404791569344 | ProfileInterpretationTool.deactivate() called
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-129404791569344 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-129404791569344 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-129404791569344 | ProfileInterpretationTool.reset() completed
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-129404791569344 | ProfileInterpretationTool deactivated successfully
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: buffer_dist = 100.5
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-129404791569344 | Setting saved to project: test_layer = id_123
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-129404791569344 | Setting saved to project: test_layer_name = RealName
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-129404791569344 | Global setting fallback: test_layer = 1.0
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:363 | Thread-129404791569344 | Project setting hit: test_layer_name = RealName
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:420 | Thread-129404791569344 | Restoring layer: test_layer -> RealName
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-129404791569344 | Point 1 added: 0.00, 0.00
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-129404791569344 | Point 2 added: 100.00, 100.00
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-129404791569344 | Point 1 added: 50.00, 50.00
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-129404791569344 | reset() called, finalized=False
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-129404791569344 | finalize_measurement called with 1 points
2026-01-06 19:59:24 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-129404791569344 | Cannot finalize measurement with less than 2 points
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-129404791569344 | finalize_measurement called with 2 points
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-129404791569344 | Setting finalized = True
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-129404791569344 | Measurement finalized: 2 points, 100.00m total distance
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-129404791569344 | Switching to pan tool to stop measurement
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-129404791569344 | Pan tool activated - measurement should be frozen
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-129404791569344 | Ignoring click - measurement is finalized
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-129404791569344 | finalize_measurement called with 2 points
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-129404791569344 | Setting finalized = True
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-129404791569344 | Measurement finalized: 2 points, 100.00m total distance
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-129404791569344 | Switching to pan tool to stop measurement
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-129404791569344 | Pan tool activated - measurement should be frozen
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-129404791569344 | reset() called, finalized=False
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-129404791569344 | reset() called, finalized=False
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-129404791569344 | reset() called, finalized=True
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-129404791569344 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-129404791569344 | reset() called, finalized=False
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-129404791569344 | finalize_measurement called with 2 points
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-129404791569344 | Setting finalized = True
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-129404791569344 | Measurement finalized: 2 points, 100.00m total distance
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-129404791569344 | Rubber band redrawn with final points only
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-129404791569344 | Switching to pan tool to stop measurement
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-129404791569344 | Pan tool activated - measurement should be frozen
2026-01-06 19:59:24 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-129404791569344 | Failed to create locator for layer layer1: mock error
2026-01-06 19:59:24 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-129404791569344 | Failed to create locator for layer l2: fail
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-129404791569344 | ProfileMeasureTool activated
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-129404791569344 | reset() called, finalized=False
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-129404791569344 | ProfileMeasureTool deactivated
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-129404791569344 | Thread processing canceled.
2026-01-06 19:59:24 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-129404791569344 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-129404791569344 | Canceling 2 active threads...
2026-01-06 19:59:24 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-129404791569344 | Parallel processing error: Test error
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-129404791569344 | Canceling 2 active threads...
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129404791569344 | create_drillhole_trace_layer called with 1 holes
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-129404791569344 | Adding 1 drillhole trace features to layer
2026-01-06 19:59:24 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-129404791569344 | Failed to create memory layer: Fail
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129404791569344 | create_drillhole_trace_layer called with 0 holes
2026-01-06 19:59:24 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-129404791569344 | No drillhole data provided for trace layer
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129404791569344 | create_drillhole_trace_layer called with 1 holes
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-129404791569344 | Skipping hole H1: insufficient trace points (1)
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-129404791569344 | Adding 0 drillhole trace features to layer
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129404791569344 | create_drillhole_trace_layer called with 1 holes
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129404791569344 | render() called
2026-01-06 19:59:24 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-129404791569344 | No valid layers to render
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129404791569344 | render() called
2026-01-06 19:59:24 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-129404791569344 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129404791569344 | render() called
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129404791569344 | render() called
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129404791569344 | render() called
2026-01-06 19:59:24 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-129404791569344 | No valid layers to render
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129404791569344 | render() called
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129404791569344 | render() called
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-129404791569344 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-129404791569344 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-129404791569344 | Point 1 added: 0.00, 0.00
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-129404791569344 | Point 2 added: 10.00, 10.00
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-129404791569344 | finalize_measurement called with 2 points
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-129404791569344 | Setting finalized = True
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-129404791569344 | Measurement finalized: 2 points, 14.14m total distance
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-129404791569344 | Rubber band redrawn with final points only
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-129404791569344 | Switching to pan tool to stop measurement
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-129404791569344 | Pan tool activated - measurement should be frozen
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-129404791569344 | reset() called, finalized=True
2026-01-06 19:59:24 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-129404791569344 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-129404791569344 | Point 1 added: 0.00, 0.00
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-129404791569344 | Point 2 added: 100.00, 100.00
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-129404791569344 | CacheService initialized (Default TTL: 3600s)
2026-01-06 19:59:24 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-129404791569344 | ProfileController initialized
2026-01-06 20:00:21 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-130091969260480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:00:21 | DEBUG    | SecInterp.exporters.csv_exporter | get_logger:127 | Thread-130091969260480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:00:21 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-130091969260480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:00:21 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-130091969260480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:00:21 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-130091969260480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:00:21 | DEBUG    | SecInterp.exporters.drillhole_exporters | get_logger:127 | Thread-130091969260480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:00:21 | DEBUG    | SecInterp.exporters.image_exporter | get_logger:127 | Thread-130091969260480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:00:21 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-130091969260480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:00:21 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-130091969260480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:00:21 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-130091969260480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:00:21 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-130091969260480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:00:21 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-130091969260480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:00:21 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-130091969260480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:00:21 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-130091969260480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:00:21 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-130091969260480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:00:21 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-130091969260480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:00:21 | DEBUG    | SecInterp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-130091969260480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:00:21 | DEBUG    | SecInterp.exporters.interpretation_exporters | get_logger:127 | Thread-130091969260480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:00:21 | DEBUG    | SecInterp.exporters.pdf_exporter | get_logger:127 | Thread-130091969260480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:00:21 | DEBUG    | SecInterp.exporters.profile_exporters | get_logger:127 | Thread-130091969260480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:00:21 | DEBUG    | SecInterp.exporters.shp_exporter | get_logger:127 | Thread-130091969260480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:00:21 | DEBUG    | SecInterp.exporters.svg_exporter | get_logger:127 | Thread-130091969260480 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:02:56 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-126060560812992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:02:56 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-126060560812992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:02:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-126060560812992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:02:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-126060560812992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:02:56 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-126060560812992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:02:56 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-126060560812992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:02:56 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-126060560812992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:02:56 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-126060560812992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:02:56 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-126060560812992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:02:56 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-126060560812992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:02:56 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-126060560812992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:02:56 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-126060560812992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:02:56 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-126060560812992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:15 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-140694639520704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:15 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-140694639520704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-140694639520704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-140694639520704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:15 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-140694639520704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:15 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-140694639520704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:15 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-140694639520704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:15 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-140694639520704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:15 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-140694639520704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:15 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-140694639520704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:15 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-140694639520704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:15 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-140694639520704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:15 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-140694639520704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:15 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-140694639520704 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:03:15 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-140694639520704 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-06 20:03:15 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-140694639520704 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:03:29 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-129411622321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:29 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-129411622321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-129411622321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-129411622321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:29 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-129411622321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:29 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-129411622321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:29 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-129411622321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:30 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-129411622321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:30 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-129411622321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:30 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-129411622321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:30 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-129411622321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:30 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-129411622321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:30 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-129411622321088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:30 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-129411622321088 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:03:30 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-129411622321088 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-06 20:03:30 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-129411622321088 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:03:43 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-123856553229248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:43 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-123856553229248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:43 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-123856553229248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:43 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-123856553229248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:43 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-123856553229248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:43 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-123856553229248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:43 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-123856553229248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:43 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-123856553229248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:43 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-123856553229248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:43 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-123856553229248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:43 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-123856553229248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:43 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-123856553229248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:43 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-123856553229248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:03:43 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-123856553229248 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:03:43 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-123856553229248 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-06 20:03:43 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-123856553229248 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:04:16 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-124488466906048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:04:16 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-124488466906048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:04:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-124488466906048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:04:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-124488466906048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:04:16 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-124488466906048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:04:16 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-124488466906048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:04:16 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-124488466906048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:04:16 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-124488466906048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:04:16 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-124488466906048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:04:16 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-124488466906048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:04:16 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-124488466906048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:04:16 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-124488466906048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:04:16 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-124488466906048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:04:16 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-124488466906048 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:04:16 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-124488466906048 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-06 20:04:16 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-124488466906048 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:04:34 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-130348736019392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:04:34 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-130348736019392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:04:34 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-130348736019392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:04:34 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-130348736019392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:04:34 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-130348736019392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:04:34 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-130348736019392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:04:34 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-130348736019392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:04:34 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-130348736019392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:04:34 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-130348736019392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:04:34 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-130348736019392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:04:34 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-130348736019392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:04:34 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-130348736019392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:04:34 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-130348736019392 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:04:34 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-130348736019392 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:04:34 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-130348736019392 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-06 20:04:34 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-130348736019392 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:05:09 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-140269548264384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:09 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-140269548264384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-140269548264384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-140269548264384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:09 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-140269548264384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:09 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-140269548264384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:09 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-140269548264384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:09 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-140269548264384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:09 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-140269548264384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:09 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-140269548264384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:09 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-140269548264384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:09 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-140269548264384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:09 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-140269548264384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:09 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-140269548264384 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:05:09 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-140269548264384 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-06 20:05:09 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-140269548264384 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:05:23 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-125002812251072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:23 | DEBUG    | SecInterp.exporters.csv_exporter | get_logger:127 | Thread-125002812251072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-125002812251072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-125002812251072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:23 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-125002812251072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:23 | DEBUG    | SecInterp.exporters.drillhole_exporters | get_logger:127 | Thread-125002812251072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:23 | DEBUG    | SecInterp.exporters.image_exporter | get_logger:127 | Thread-125002812251072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:23 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-125002812251072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:23 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-125002812251072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:23 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-125002812251072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:23 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-125002812251072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:23 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-125002812251072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:23 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-125002812251072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:23 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-125002812251072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:23 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-125002812251072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:23 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-125002812251072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:23 | DEBUG    | SecInterp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-125002812251072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:23 | DEBUG    | SecInterp.exporters.interpretation_exporters | get_logger:127 | Thread-125002812251072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:23 | DEBUG    | SecInterp.exporters.pdf_exporter | get_logger:127 | Thread-125002812251072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:23 | DEBUG    | SecInterp.exporters.profile_exporters | get_logger:127 | Thread-125002812251072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:23 | DEBUG    | SecInterp.exporters.shp_exporter | get_logger:127 | Thread-125002812251072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:23 | DEBUG    | SecInterp.exporters.svg_exporter | get_logger:127 | Thread-125002812251072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:31 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-135047599246272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:31 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-135047599246272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-135047599246272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-135047599246272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:31 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-135047599246272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:31 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-135047599246272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:31 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-135047599246272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:31 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-135047599246272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:31 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-135047599246272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:31 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-135047599246272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:31 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-135047599246272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:31 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-135047599246272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:31 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-135047599246272 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:39 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-124373622385600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:39 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-124373622385600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:39 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-124373622385600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:39 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-124373622385600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:39 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-124373622385600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:39 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-124373622385600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:39 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-124373622385600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:39 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-124373622385600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:39 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-124373622385600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:39 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-124373622385600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:39 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-124373622385600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:39 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-124373622385600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:05:39 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-124373622385600 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:03 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-133598683446208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:03 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-133598683446208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:03 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-133598683446208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:03 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-133598683446208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:03 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-133598683446208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:03 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-133598683446208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:03 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-133598683446208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:03 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-133598683446208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:03 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-133598683446208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:03 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-133598683446208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:03 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-133598683446208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:03 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-133598683446208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:03 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-133598683446208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:03 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-133598683446208 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:06:03 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-133598683446208 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-06 20:06:03 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-133598683446208 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:06:03 | ERROR    | SecInterp.sec_interp.exporters.interpretation_exporters | export:144 | Thread-133598683446208 | Failed to export interpretations: Success
2026-01-06 20:06:30 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-125613875485632 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:30 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-125613875485632 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-125613875485632 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-125613875485632 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:30 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-125613875485632 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:30 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-125613875485632 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:30 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-125613875485632 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:30 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-125613875485632 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:30 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-125613875485632 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:30 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-125613875485632 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:30 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-125613875485632 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:30 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-125613875485632 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:30 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-125613875485632 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:30 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-125613875485632 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:06:30 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-125613875485632 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-06 20:06:30 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-125613875485632 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:06:30 | ERROR    | SecInterp.sec_interp.exporters.interpretation_exporters | export:144 | Thread-125613875485632 | Failed to export interpretations: Success
2026-01-06 20:06:52 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-128024232868800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:52 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-128024232868800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:52 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-128024232868800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:52 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-128024232868800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:52 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-128024232868800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:52 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-128024232868800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:52 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-128024232868800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:52 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-128024232868800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:52 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-128024232868800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:52 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-128024232868800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:52 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-128024232868800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:52 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-128024232868800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:52 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-128024232868800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:06:52 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-128024232868800 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:06:52 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-128024232868800 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-06 20:06:52 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-128024232868800 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:06:52 | ERROR    | SecInterp.sec_interp.exporters.interpretation_exporters | export:144 | Thread-128024232868800 | Failed to export interpretations: Success
2026-01-06 20:07:18 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-124135652383680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:07:18 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-124135652383680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:07:18 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-124135652383680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:07:18 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-124135652383680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:07:18 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-124135652383680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:07:18 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-124135652383680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:07:18 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-124135652383680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:07:18 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-124135652383680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:07:18 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-124135652383680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:07:18 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-124135652383680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:07:18 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-124135652383680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:07:18 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-124135652383680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:07:18 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-124135652383680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:07:18 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-124135652383680 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:07:18 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-124135652383680 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-06 20:07:18 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-124135652383680 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:07:18 | ERROR    | SecInterp.sec_interp.exporters.interpretation_exporters | export:144 | Thread-124135652383680 | Failed to export interpretations: Success
2026-01-06 20:08:14 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-137824830536640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:08:14 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-137824830536640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:08:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-137824830536640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:08:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-137824830536640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:08:14 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-137824830536640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:08:14 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-137824830536640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:08:14 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-137824830536640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:08:14 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-137824830536640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:08:14 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-137824830536640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:08:14 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-137824830536640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:08:14 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-137824830536640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:08:14 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-137824830536640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:08:14 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-137824830536640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:08:14 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-137824830536640 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:08:14 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-137824830536640 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-06 20:08:14 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-137824830536640 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:08:14 | ERROR    | SecInterp.sec_interp.exporters.interpretation_exporters | export:144 | Thread-137824830536640 | Failed to export interpretations: Success
2026-01-06 20:08:38 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-137286992698304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:08:38 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-137286992698304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:08:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-137286992698304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:08:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-137286992698304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:08:38 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-137286992698304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:08:38 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-137286992698304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:08:38 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-137286992698304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:08:38 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-137286992698304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:08:38 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-137286992698304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:08:38 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-137286992698304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:08:38 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-137286992698304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:08:38 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-137286992698304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:08:38 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-137286992698304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:08:38 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-137286992698304 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:08:38 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-137286992698304 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-06 20:08:38 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-137286992698304 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:08:38 | ERROR    | SecInterp.sec_interp.exporters.interpretation_exporters | export:144 | Thread-137286992698304 | Failed to export interpretations: Success
2026-01-06 20:09:19 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-134462458182592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:09:19 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-134462458182592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:09:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-134462458182592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:09:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-134462458182592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:09:19 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-134462458182592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:09:19 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-134462458182592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:09:19 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-134462458182592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:09:19 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-134462458182592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:09:19 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-134462458182592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:09:19 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-134462458182592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:09:19 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-134462458182592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:09:19 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-134462458182592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:09:19 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-134462458182592 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:09:19 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-134462458182592 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:09:19 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:100 | Thread-134462458182592 | Failed to generate QML style: 'MockQgsVectorLayer' object has no attribute 'saveNamedStyle'
2026-01-06 20:09:19 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-134462458182592 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-06 20:09:19 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:100 | Thread-134462458182592 | Failed to generate QML style: 'MockQgsVectorLayer' object has no attribute 'saveNamedStyle'
2026-01-06 20:09:19 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-134462458182592 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:09:19 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:100 | Thread-134462458182592 | Failed to generate QML style: 'MockQgsVectorLayer' object has no attribute 'saveNamedStyle'
2026-01-06 20:09:19 | ERROR    | SecInterp.sec_interp.exporters.interpretation_exporters | export:144 | Thread-134462458182592 | Failed to export interpretations: Success
2026-01-06 20:12:25 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-131991006292928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:12:25 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-131991006292928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:12:25 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-131991006292928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:12:25 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-131991006292928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:12:25 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-131991006292928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:12:25 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-131991006292928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:12:25 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-131991006292928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:12:25 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-131991006292928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:12:25 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-131991006292928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:12:25 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-131991006292928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:12:25 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-131991006292928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:12:25 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-131991006292928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:12:25 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-131991006292928 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:12:25 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-131991006292928 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:12:25 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:100 | Thread-131991006292928 | Failed to generate QML style: 'MockQgsVectorLayer' object has no attribute 'saveNamedStyle'
2026-01-06 20:12:25 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-131991006292928 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-06 20:12:25 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:100 | Thread-131991006292928 | Failed to generate QML style: 'MockQgsVectorLayer' object has no attribute 'saveNamedStyle'
2026-01-06 20:12:25 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-131991006292928 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:12:25 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:100 | Thread-131991006292928 | Failed to generate QML style: 'MockQgsVectorLayer' object has no attribute 'saveNamedStyle'
2026-01-06 20:12:25 | ERROR    | SecInterp.sec_interp.exporters.interpretation_exporters | export:144 | Thread-131991006292928 | Failed to export interpretations: Success
2026-01-06 20:13:24 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-127448881109952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:13:24 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-127448881109952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:13:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-127448881109952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:13:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-127448881109952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:13:24 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-127448881109952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:13:24 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-127448881109952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:13:24 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-127448881109952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:13:24 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-127448881109952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:13:24 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-127448881109952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:13:24 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-127448881109952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:13:24 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-127448881109952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:13:24 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-127448881109952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:13:24 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-127448881109952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:13:24 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-127448881109952 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:13:24 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:100 | Thread-127448881109952 | Failed to generate QML style: 'MockQgsVectorLayer' object has no attribute 'saveNamedStyle'
2026-01-06 20:13:24 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-127448881109952 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-06 20:13:24 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:100 | Thread-127448881109952 | Failed to generate QML style: 'MockQgsVectorLayer' object has no attribute 'saveNamedStyle'
2026-01-06 20:13:24 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-127448881109952 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:13:24 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:100 | Thread-127448881109952 | Failed to generate QML style: 'MockQgsVectorLayer' object has no attribute 'saveNamedStyle'
2026-01-06 20:13:24 | ERROR    | SecInterp.sec_interp.exporters.interpretation_exporters | export:144 | Thread-127448881109952 | Failed to export interpretations: Success
2026-01-06 20:14:04 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-139158479059904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:14:04 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-139158479059904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:14:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-139158479059904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:14:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-139158479059904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:14:04 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-139158479059904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:14:04 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-139158479059904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:14:04 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-139158479059904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:14:04 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-139158479059904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:14:04 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-139158479059904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:14:04 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-139158479059904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:14:04 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-139158479059904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:14:04 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-139158479059904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:14:04 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-139158479059904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:14:04 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-139158479059904 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:14:04 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-139158479059904 | Generated QML style: /tmp/test.qml
2026-01-06 20:14:04 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-139158479059904 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-06 20:14:04 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-139158479059904 | Generated QML style: dummy.qml
2026-01-06 20:14:04 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-139158479059904 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:14:04 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-139158479059904 | Generated QML style: dummy.qml
2026-01-06 20:14:04 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | export:139 | Thread-139158479059904 | Successfully exported 1 interpretations to /tmp/test_dynamic.shp
2026-01-06 20:26:31 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-133453749287872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:26:31 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-133453749287872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:26:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-133453749287872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:26:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-133453749287872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:26:31 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-133453749287872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:26:31 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-133453749287872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:26:31 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-133453749287872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:26:31 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-133453749287872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:26:31 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-133453749287872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:26:31 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-133453749287872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:26:31 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-133453749287872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:26:31 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-133453749287872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:26:31 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-133453749287872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:26:31 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-133453749287872 | Successfully exported to /tmp/test_dynamic.shp
2026-01-06 20:26:31 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-133453749287872 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:26:31 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-133453749287872 | Generated QML style: /tmp/test.qml
2026-01-06 20:26:31 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-133453749287872 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-06 20:26:31 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-133453749287872 | Generated QML style: dummy.qml
2026-01-06 20:26:31 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:316 | Thread-133453749287872 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:26:31 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-133453749287872 | Generated QML style: dummy.qml
2026-01-06 20:34:15 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-126934423587776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:34:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-126934423587776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:34:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-126934423587776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:34:15 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-126934423587776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:34:15 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-126934423587776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:34:15 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-126934423587776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:34:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-126934423587776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:34:16 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-126934423587776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:34:16 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-126934423587776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:34:16 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-126934423587776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:34:16 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-126934423587776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:34:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-126934423587776 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:44:10 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-129508593433536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:44:10 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-129508593433536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:44:10 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-129508593433536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:44:10 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-129508593433536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:44:10 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-129508593433536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:44:10 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-129508593433536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:44:10 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-129508593433536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:44:10 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-129508593433536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:44:10 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-129508593433536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:44:10 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-129508593433536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:44:10 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-129508593433536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:44:10 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-129508593433536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:44:10 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-129508593433536 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-06 20:44:10 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-129508593433536 | Successfully exported to /tmp/test_dynamic.shp
2026-01-06 20:44:10 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-129508593433536 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:44:10 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-129508593433536 | Generated QML style: /tmp/test.qml
2026-01-06 20:44:10 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-129508593433536 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-06 20:44:10 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-129508593433536 | Generated QML style: dummy.qml
2026-01-06 20:44:10 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-129508593433536 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-06 20:44:10 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-129508593433536 | Generated QML style: dummy.qml
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.services.parallel_geology_service | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-133469837732800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133469837732800 | Config set: SecInterp/scale = 50000.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133469837732800 | Config set: SecInterp/vert_exag = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133469837732800 | Config set: SecInterp/buffer_dist = 100.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133469837732800 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133469837732800 | Config set: SecInterp/last_output_dir = 
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133469837732800 | Config set: SecInterp/dpi = 300
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133469837732800 | Config set: SecInterp/preview_width = 800
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133469837732800 | Config set: SecInterp/preview_height = 600
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133469837732800 | Config set: SecInterp/sampling_interval = 10.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133469837732800 | Config set: SecInterp/export_quality = 95
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133469837732800 | Config set: SecInterp/auto_lod = True
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133469837732800 | Config set: SecInterp/max_preview_points = 10000
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-133469837732800 | Configuration reset to defaults
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133469837732800 | Config set: SecInterp/scale = 200.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133469837732800 | CacheService initialized (Default TTL: 3600s)
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133469837732800 | CacheService initialized (Default TTL: 3600s)
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133469837732800 | CacheService initialized (Default TTL: 3600s)
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-133469837732800 | Projecting collars from Test Layer with buffer 50.0m
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-133469837732800 | No collars found within buffer area.
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-133469837732800 | Projecting collars from Test Layer with buffer 50.0m
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-133469837732800 | DrillholeService.project_collars END: Found 1 collars.
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-133469837732800 | ✓ Saving profile axes...
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-133469837732800 | ✓ Saving topographic profile...
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-133469837732800 | ✓ Saving interpretation data...
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-133469837732800 | 3D Export features are restricted for this user.
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-133469837732800 | ✓ Saving profile axes...
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-133469837732800 | ✓ Saving topographic profile...
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-133469837732800 | ✓ Saving interpretation data...
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-133469837732800 | ✓ Saving 3D interpretation data...
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-133469837732800 | ✓ Saving profile axes...
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-133469837732800 | ✓ Saving topographic profile...
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-133469837732800 | ✓ Saving geological profile...
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-133469837732800 | ✓ Saving structural profile...
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-133469837732800 | ✓ Saving drillhole data...
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-133469837732800 | ✓ Saving interpretation data...
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-133469837732800 | Access denied for restricted feature: 3D Export
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-133469837732800 | 3D Export features are restricted for this user.
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-133469837732800 | ✓ Saving profile axes...
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-133469837732800 | ✓ Saving topographic profile...
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-133469837732800 | No interpretations provided for export.
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-133469837732800 | ✓ Saving profile axes...
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-133469837732800 | ✓ Saving drillhole data...
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-133469837732800 | ✓ Saving geological profile...
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-133469837732800 | ✓ Saving interpretation data...
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-133469837732800 | ✓ Saving 3D interpretation data...
2026-01-07 04:16:00 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-133469837732800 | Invalid section line layer, skipping 3D export.
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-133469837732800 | ✓ Saving interpretation data...
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-133469837732800 | ✓ Saving structural profile...
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-133469837732800 | ✓ Saving topographic profile...
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-133469837732800 | Generating master profile with interval=10.00
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-133469837732800 | Generated 1 geological segments
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-133469837732800 | Generating master profile with interval=50.00
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-133469837732800 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-133469837732800 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-133469837732800 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-133469837732800 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-133469837732800 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-133469837732800 | Running geometry operation: test
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-133469837732800 | Generated 1 drillhole traces
2026-01-07 04:16:00 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-133469837732800 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-07 04:16:00 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-133469837732800 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-133469837732800 | Generated 1 drillhole traces
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-133469837732800 | Drillhole preview skipped: No Collar ID field selected.
2026-01-07 04:16:00 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-133469837732800 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-07 04:16:00 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:109 | Thread-133469837732800 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-07 04:16:00 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:184 | Thread-133469837732800 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 175, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-07 04:16:00 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:296 | Thread-133469837732800 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 285, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 175, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-07 04:16:00 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-133469837732800 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-133469837732800 | Analyzing structures in Structure Layer with buffer 10m
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-133469837732800 | Processed 1 structural measurements from Structure Layer
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-133469837732800 | Successfully exported to /tmp/test_dynamic.shp
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-133469837732800 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-133469837732800 | Generated QML style: /tmp/test.qml
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-133469837732800 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-133469837732800 | Generated QML style: dummy.qml
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-133469837732800 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-133469837732800 | Generated QML style: dummy.qml
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-133469837732800 | Loaded 0 interpretations from project
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: section_layer = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: section_layer_name = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133469837732800 | Failed to restore layer for section_layer
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: buffer_dist = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: dem_layer = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: dem_layer_name = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133469837732800 | Failed to restore layer for dem_layer
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: dem_band = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: scale = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: vert_exag = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: geol_layer = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: geol_layer_name = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133469837732800 | Failed to restore layer for geol_layer
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: geol_field = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: struct_layer = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: struct_layer_name = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133469837732800 | Failed to restore layer for struct_layer
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: struct_dip_field = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: struct_strike_field = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: dip_scale_factor = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: dh_collar_layer = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133469837732800 | Failed to restore layer for dh_collar_layer
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: dh_collar_id = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: dh_use_geom = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: dh_collar_x = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: dh_collar_y = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: dh_collar_z = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: dh_collar_depth = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: dh_survey_layer = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133469837732800 | Failed to restore layer for dh_survey_layer
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: dh_survey_id = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: dh_survey_depth = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: dh_survey_azim = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: dh_survey_incl = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: dh_interval_layer = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-133469837732800 | Failed to restore layer for dh_interval_layer
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: dh_interval_id = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: dh_interval_from = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: dh_interval_to = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: dh_interval_lith = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: last_output_dir = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: interp_custom_fields = 1.0
2026-01-07 04:16:00 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:176 | Thread-133469837732800 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: show_topo = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: show_geol = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: show_struct = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: show_drillholes = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: show_interpretations = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: auto_lod = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: adaptive_sampling = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: max_points = 1.0
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-133469837732800 | Settings loaded successfully from Project/Global config
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:447 | Thread-133469837732800 | Cache cleared by user
2026-01-07 04:16:00 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-133469837732800 | Test Title: Test Message
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-133469837732800 | Test Title: Test Message
2026-01-07 04:16:00 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-133469837732800 | Test Title: Test Message
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-133469837732800 | CRITICAL_OP: finalize_polygon | points=2
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-133469837732800 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-07 04:16:00 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-133469837732800 | finalize_polygon() aborted - less than 3 points
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-133469837732800 | CRITICAL_OP: finalize_polygon | points=3
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-133469837732800 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-133469837732800 | finalize_polygon() - emitting polygonFinished signal for 115e15c3-2476-4bd8-96ef-9d479694e6eb
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-133469837732800 | Interpretation polygon finalized with 3 vertices, ID: 115e15c3-2476-4bd8-96ef-9d479694e6eb
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-133469837732800 | finalize_polygon() completed
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-133469837732800 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-133469837732800 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-133469837732800 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-133469837732800 | ProfileInterpretationTool.reset() completed
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-133469837732800 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-133469837732800 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-133469837732800 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-133469837732800 | ProfileInterpretationTool.reset() completed
2026-01-07 04:16:00 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-133469837732800 | Failed to create locator for layer layer1: mock error
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-133469837732800 | ProfileInterpretationTool.activate() called
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-133469837732800 | ProfileInterpretationTool activated successfully
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-133469837732800 | ProfileInterpretationTool.deactivate() called
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-133469837732800 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-133469837732800 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-133469837732800 | ProfileInterpretationTool.reset() completed
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-133469837732800 | ProfileInterpretationTool deactivated successfully
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: buffer_dist = 100.5
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-133469837732800 | Setting saved to project: test_layer = id_123
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-133469837732800 | Setting saved to project: test_layer_name = RealName
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-133469837732800 | Global setting fallback: test_layer = 1.0
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:363 | Thread-133469837732800 | Project setting hit: test_layer_name = RealName
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:420 | Thread-133469837732800 | Restoring layer: test_layer -> RealName
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-133469837732800 | Point 1 added: 0.00, 0.00
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-133469837732800 | Point 2 added: 100.00, 100.00
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-133469837732800 | Point 1 added: 50.00, 50.00
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133469837732800 | reset() called, finalized=False
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-133469837732800 | finalize_measurement called with 1 points
2026-01-07 04:16:00 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-133469837732800 | Cannot finalize measurement with less than 2 points
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-133469837732800 | finalize_measurement called with 2 points
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-133469837732800 | Setting finalized = True
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133469837732800 | Measurement finalized: 2 points, 100.00m total distance
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-133469837732800 | Switching to pan tool to stop measurement
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-133469837732800 | Pan tool activated - measurement should be frozen
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-133469837732800 | Ignoring click - measurement is finalized
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-133469837732800 | finalize_measurement called with 2 points
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-133469837732800 | Setting finalized = True
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133469837732800 | Measurement finalized: 2 points, 100.00m total distance
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-133469837732800 | Switching to pan tool to stop measurement
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-133469837732800 | Pan tool activated - measurement should be frozen
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133469837732800 | reset() called, finalized=False
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133469837732800 | reset() called, finalized=False
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133469837732800 | reset() called, finalized=True
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-133469837732800 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133469837732800 | reset() called, finalized=False
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-133469837732800 | finalize_measurement called with 2 points
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-133469837732800 | Setting finalized = True
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133469837732800 | Measurement finalized: 2 points, 100.00m total distance
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-133469837732800 | Rubber band redrawn with final points only
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-133469837732800 | Switching to pan tool to stop measurement
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-133469837732800 | Pan tool activated - measurement should be frozen
2026-01-07 04:16:00 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-133469837732800 | Failed to create locator for layer layer1: mock error
2026-01-07 04:16:00 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-133469837732800 | Failed to create locator for layer l2: fail
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-133469837732800 | ProfileMeasureTool activated
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133469837732800 | reset() called, finalized=False
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-133469837732800 | ProfileMeasureTool deactivated
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | run:61 | Thread-133469837732800 | Thread processing canceled.
2026-01-07 04:16:00 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | run:77 | Thread-133469837732800 | Error in processing thread: Boom
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/services/parallel_geology_service.py", line 66, in run
    res = self.processing_func(item)
  File "/home/jmbernales/qgispluginsdev/sec_interp/tests/gui/test_parallel_geology_service.py", line 74, in process_func
    raise ValueError("Boom")
ValueError: Boom
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-133469837732800 | Canceling 2 active threads...
2026-01-07 04:16:00 | ERROR    | SecInterp.sec_interp.gui.services.parallel_geology_service | _on_chunk_error:197 | Thread-133469837732800 | Parallel processing error: Test error
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.services.parallel_geology_service | cancel_processing:166 | Thread-133469837732800 | Canceling 2 active threads...
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133469837732800 | create_drillhole_trace_layer called with 1 holes
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-133469837732800 | Adding 1 drillhole trace features to layer
2026-01-07 04:16:00 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-133469837732800 | Failed to create memory layer: Fail
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133469837732800 | create_drillhole_trace_layer called with 0 holes
2026-01-07 04:16:00 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-133469837732800 | No drillhole data provided for trace layer
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133469837732800 | create_drillhole_trace_layer called with 1 holes
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-133469837732800 | Skipping hole H1: insufficient trace points (1)
2026-01-07 04:16:00 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-133469837732800 | Adding 0 drillhole trace features to layer
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133469837732800 | create_drillhole_trace_layer called with 1 holes
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133469837732800 | render() called
2026-01-07 04:16:00 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-133469837732800 | No valid layers to render
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133469837732800 | render() called
2026-01-07 04:16:00 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-133469837732800 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133469837732800 | render() called
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133469837732800 | render() called
2026-01-07 04:16:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133469837732800 | render() called
2026-01-07 04:16:00 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-133469837732800 | No valid layers to render
2026-01-07 04:16:01 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133469837732800 | render() called
2026-01-07 04:16:01 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133469837732800 | render() called
2026-01-07 04:16:01 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-133469837732800 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-07 04:16:01 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-133469837732800 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-07 04:16:01 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-133469837732800 | Point 1 added: 0.00, 0.00
2026-01-07 04:16:01 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-133469837732800 | Point 2 added: 10.00, 10.00
2026-01-07 04:16:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-133469837732800 | finalize_measurement called with 2 points
2026-01-07 04:16:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-133469837732800 | Setting finalized = True
2026-01-07 04:16:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133469837732800 | Measurement finalized: 2 points, 14.14m total distance
2026-01-07 04:16:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-133469837732800 | Rubber band redrawn with final points only
2026-01-07 04:16:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-133469837732800 | Switching to pan tool to stop measurement
2026-01-07 04:16:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-133469837732800 | Pan tool activated - measurement should be frozen
2026-01-07 04:16:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-133469837732800 | reset() called, finalized=True
2026-01-07 04:16:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-133469837732800 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-07 04:16:01 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-133469837732800 | Point 1 added: 0.00, 0.00
2026-01-07 04:16:01 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-133469837732800 | Point 2 added: 100.00, 100.00
2026-01-07 04:16:01 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133469837732800 | CacheService initialized (Default TTL: 3600s)
2026-01-07 04:16:01 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-133469837732800 | ProfileController initialized
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-129899086408640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-129899086408640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-129899086408640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-129899086408640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-129899086408640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-129899086408640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-129899086408640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-129899086408640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-129899086408640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-129899086408640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-129899086408640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-129899086408640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-129899086408640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-129899086408640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-129899086408640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-129899086408640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-129899086408640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-129899086408640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-129899086408640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-129899086408640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-129899086408640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-129899086408640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-129899086408640 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129899086408640 | Config set: SecInterp/scale = 50000.0
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129899086408640 | Config set: SecInterp/vert_exag = 1.0
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129899086408640 | Config set: SecInterp/buffer_dist = 100.0
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129899086408640 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129899086408640 | Config set: SecInterp/last_output_dir = 
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129899086408640 | Config set: SecInterp/dpi = 300
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129899086408640 | Config set: SecInterp/preview_width = 800
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129899086408640 | Config set: SecInterp/preview_height = 600
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129899086408640 | Config set: SecInterp/sampling_interval = 10.0
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129899086408640 | Config set: SecInterp/export_quality = 95
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129899086408640 | Config set: SecInterp/auto_lod = True
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129899086408640 | Config set: SecInterp/max_preview_points = 10000
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-129899086408640 | Configuration reset to defaults
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-129899086408640 | Config set: SecInterp/scale = 200.0
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-129899086408640 | CacheService initialized (Default TTL: 3600s)
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-129899086408640 | CacheService initialized (Default TTL: 3600s)
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-129899086408640 | CacheService initialized (Default TTL: 3600s)
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-129899086408640 | Projecting collars from Test Layer with buffer 50.0m
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-129899086408640 | No collars found within buffer area.
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-129899086408640 | Projecting collars from Test Layer with buffer 50.0m
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-129899086408640 | DrillholeService.project_collars END: Found 1 collars.
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129899086408640 | ✓ Saving profile axes...
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-129899086408640 | ✓ Saving topographic profile...
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129899086408640 | ✓ Saving interpretation data...
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-129899086408640 | 3D Export features are restricted for this user.
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129899086408640 | ✓ Saving profile axes...
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-129899086408640 | ✓ Saving topographic profile...
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129899086408640 | ✓ Saving interpretation data...
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-129899086408640 | ✓ Saving 3D interpretation data...
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129899086408640 | ✓ Saving profile axes...
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-129899086408640 | ✓ Saving topographic profile...
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-129899086408640 | ✓ Saving geological profile...
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-129899086408640 | ✓ Saving structural profile...
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-129899086408640 | ✓ Saving drillhole data...
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129899086408640 | ✓ Saving interpretation data...
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-129899086408640 | Access denied for restricted feature: 3D Export
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-129899086408640 | 3D Export features are restricted for this user.
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129899086408640 | ✓ Saving profile axes...
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-129899086408640 | ✓ Saving topographic profile...
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-129899086408640 | No interpretations provided for export.
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-129899086408640 | ✓ Saving profile axes...
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-129899086408640 | ✓ Saving drillhole data...
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-129899086408640 | ✓ Saving geological profile...
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129899086408640 | ✓ Saving interpretation data...
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-129899086408640 | ✓ Saving 3D interpretation data...
2026-01-07 04:16:56 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-129899086408640 | Invalid section line layer, skipping 3D export.
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-129899086408640 | ✓ Saving interpretation data...
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-129899086408640 | ✓ Saving structural profile...
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-129899086408640 | ✓ Saving topographic profile...
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-129899086408640 | Generating master profile with interval=10.00
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-129899086408640 | Generated 1 geological segments
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-129899086408640 | Generating master profile with interval=50.00
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-129899086408640 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-129899086408640 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-129899086408640 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-129899086408640 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-129899086408640 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-07 04:16:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-129899086408640 | Running geometry operation: test
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-129899086408640 | Generated 1 drillhole traces
2026-01-07 04:16:56 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-129899086408640 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-07 04:16:56 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-129899086408640 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-129899086408640 | Generated 1 drillhole traces
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-129899086408640 | Drillhole preview skipped: No Collar ID field selected.
2026-01-07 04:16:56 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-129899086408640 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-07 04:16:56 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:109 | Thread-129899086408640 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-07 04:16:56 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:184 | Thread-129899086408640 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 175, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-07 04:16:56 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:296 | Thread-129899086408640 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 285, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 175, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-07 04:16:56 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-129899086408640 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-129899086408640 | Analyzing structures in Structure Layer with buffer 10m
2026-01-07 04:16:56 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-129899086408640 | Processed 1 structural measurements from Structure Layer
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-126820848118720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-126820848118720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-126820848118720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-126820848118720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-126820848118720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-126820848118720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-126820848118720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-126820848118720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-126820848118720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-126820848118720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-126820848118720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-126820848118720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-126820848118720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-126820848118720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-126820848118720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-126820848118720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-126820848118720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-126820848118720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-126820848118720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-126820848118720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-126820848118720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-126820848118720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-126820848118720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126820848118720 | Config set: SecInterp/scale = 50000.0
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126820848118720 | Config set: SecInterp/vert_exag = 1.0
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126820848118720 | Config set: SecInterp/buffer_dist = 100.0
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126820848118720 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126820848118720 | Config set: SecInterp/last_output_dir = 
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126820848118720 | Config set: SecInterp/dpi = 300
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126820848118720 | Config set: SecInterp/preview_width = 800
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126820848118720 | Config set: SecInterp/preview_height = 600
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126820848118720 | Config set: SecInterp/sampling_interval = 10.0
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126820848118720 | Config set: SecInterp/export_quality = 95
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126820848118720 | Config set: SecInterp/auto_lod = True
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126820848118720 | Config set: SecInterp/max_preview_points = 10000
2026-01-07 04:17:29 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-126820848118720 | Configuration reset to defaults
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-126820848118720 | Config set: SecInterp/scale = 200.0
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126820848118720 | CacheService initialized (Default TTL: 3600s)
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126820848118720 | CacheService initialized (Default TTL: 3600s)
2026-01-07 04:17:29 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126820848118720 | CacheService initialized (Default TTL: 3600s)
2026-01-07 04:17:29 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-126820848118720 | Projecting collars from Test Layer with buffer 50.0m
2026-01-07 04:17:29 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-126820848118720 | No collars found within buffer area.
2026-01-07 04:17:29 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-126820848118720 | Projecting collars from Test Layer with buffer 50.0m
2026-01-07 04:17:29 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-126820848118720 | DrillholeService.project_collars END: Found 1 collars.
2026-01-07 04:17:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-126820848118720 | ✓ Saving profile axes...
2026-01-07 04:17:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-126820848118720 | ✓ Saving topographic profile...
2026-01-07 04:17:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-126820848118720 | ✓ Saving interpretation data...
2026-01-07 04:17:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-126820848118720 | 3D Export features are restricted for this user.
2026-01-07 04:17:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-126820848118720 | ✓ Saving profile axes...
2026-01-07 04:17:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-126820848118720 | ✓ Saving topographic profile...
2026-01-07 04:17:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-126820848118720 | ✓ Saving interpretation data...
2026-01-07 04:17:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-126820848118720 | ✓ Saving 3D interpretation data...
2026-01-07 04:17:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-126820848118720 | ✓ Saving profile axes...
2026-01-07 04:17:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-126820848118720 | ✓ Saving topographic profile...
2026-01-07 04:17:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-126820848118720 | ✓ Saving geological profile...
2026-01-07 04:17:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-126820848118720 | ✓ Saving structural profile...
2026-01-07 04:17:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-126820848118720 | ✓ Saving drillhole data...
2026-01-07 04:17:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-126820848118720 | ✓ Saving interpretation data...
2026-01-07 04:17:30 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-126820848118720 | Access denied for restricted feature: 3D Export
2026-01-07 04:17:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-126820848118720 | 3D Export features are restricted for this user.
2026-01-07 04:17:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-126820848118720 | ✓ Saving profile axes...
2026-01-07 04:17:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-126820848118720 | ✓ Saving topographic profile...
2026-01-07 04:17:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-126820848118720 | No interpretations provided for export.
2026-01-07 04:17:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-126820848118720 | ✓ Saving profile axes...
2026-01-07 04:17:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-126820848118720 | ✓ Saving drillhole data...
2026-01-07 04:17:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-126820848118720 | ✓ Saving geological profile...
2026-01-07 04:17:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-126820848118720 | ✓ Saving interpretation data...
2026-01-07 04:17:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-126820848118720 | ✓ Saving 3D interpretation data...
2026-01-07 04:17:30 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-126820848118720 | Invalid section line layer, skipping 3D export.
2026-01-07 04:17:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-126820848118720 | ✓ Saving interpretation data...
2026-01-07 04:17:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-126820848118720 | ✓ Saving structural profile...
2026-01-07 04:17:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-126820848118720 | ✓ Saving topographic profile...
2026-01-07 04:17:30 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-126820848118720 | Generating master profile with interval=10.00
2026-01-07 04:17:30 | INFO     | SecInterp.sec_interp.core.services.geology_service | generate_geological_profile:128 | Thread-126820848118720 | Generated 1 geological segments
2026-01-07 04:17:30 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:158 | Thread-126820848118720 | Generating master profile with interval=50.00
2026-01-07 04:17:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-126820848118720 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-07 04:17:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-126820848118720 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-07 04:17:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-126820848118720 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-07 04:17:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-126820848118720 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-07 04:17:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-126820848118720 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-07 04:17:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-126820848118720 | Running geometry operation: test
2026-01-07 04:17:30 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-126820848118720 | Generated 1 drillhole traces
2026-01-07 04:17:30 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-126820848118720 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-07 04:17:30 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-126820848118720 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-07 04:17:30 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-126820848118720 | Generated 1 drillhole traces
2026-01-07 04:17:30 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-126820848118720 | Drillhole preview skipped: No Collar ID field selected.
2026-01-07 04:17:30 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-126820848118720 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-07 04:17:30 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:109 | Thread-126820848118720 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-07 04:17:30 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:184 | Thread-126820848118720 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 175, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-07 04:17:30 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:296 | Thread-126820848118720 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 285, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 175, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-07 04:17:30 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-126820848118720 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-07 04:17:30 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-126820848118720 | Analyzing structures in Structure Layer with buffer 10m
2026-01-07 04:17:30 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-126820848118720 | Processed 1 structural measurements from Structure Layer
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-123294952283072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123294952283072 | Config set: SecInterp/scale = 50000.0
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123294952283072 | Config set: SecInterp/vert_exag = 1.0
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123294952283072 | Config set: SecInterp/buffer_dist = 100.0
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123294952283072 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123294952283072 | Config set: SecInterp/last_output_dir = 
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123294952283072 | Config set: SecInterp/dpi = 300
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123294952283072 | Config set: SecInterp/preview_width = 800
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123294952283072 | Config set: SecInterp/preview_height = 600
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123294952283072 | Config set: SecInterp/sampling_interval = 10.0
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123294952283072 | Config set: SecInterp/export_quality = 95
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123294952283072 | Config set: SecInterp/auto_lod = True
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123294952283072 | Config set: SecInterp/max_preview_points = 10000
2026-01-07 21:02:32 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-123294952283072 | Configuration reset to defaults
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123294952283072 | Config set: SecInterp/scale = 200.0
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123294952283072 | CacheService initialized (Default TTL: 3600s)
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123294952283072 | CacheService initialized (Default TTL: 3600s)
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123294952283072 | CacheService initialized (Default TTL: 3600s)
2026-01-07 21:02:32 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-123294952283072 | Projecting collars from Test Layer with buffer 50.0m
2026-01-07 21:02:32 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-123294952283072 | No collars found within buffer area.
2026-01-07 21:02:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-123294952283072 | ✓ Saving profile axes...
2026-01-07 21:02:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-123294952283072 | ✓ Saving topographic profile...
2026-01-07 21:02:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-123294952283072 | ✓ Saving interpretation data...
2026-01-07 21:02:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-123294952283072 | 3D Export features are restricted for this user.
2026-01-07 21:02:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-123294952283072 | ✓ Saving profile axes...
2026-01-07 21:02:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-123294952283072 | ✓ Saving topographic profile...
2026-01-07 21:02:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-123294952283072 | ✓ Saving geological profile...
2026-01-07 21:02:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-123294952283072 | ✓ Saving structural profile...
2026-01-07 21:02:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-123294952283072 | ✓ Saving drillhole data...
2026-01-07 21:02:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-123294952283072 | ✓ Saving interpretation data...
2026-01-07 21:02:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-123294952283072 | ✓ Saving 3D interpretation data...
2026-01-07 21:02:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-123294952283072 | ✓ Saving topographic profile...
2026-01-07 21:02:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-123294952283072 | No interpretations provided for export.
2026-01-07 21:02:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-123294952283072 | ✓ Saving profile axes...
2026-01-07 21:02:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-123294952283072 | ✓ Saving drillhole data...
2026-01-07 21:02:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-123294952283072 | ✓ Saving geological profile...
2026-01-07 21:02:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-123294952283072 | ✓ Saving interpretation data...
2026-01-07 21:02:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-123294952283072 | ✓ Saving 3D interpretation data...
2026-01-07 21:02:32 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-123294952283072 | Invalid section line layer, skipping 3D export.
2026-01-07 21:02:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-123294952283072 | ✓ Saving interpretation data...
2026-01-07 21:02:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-123294952283072 | ✓ Saving structural profile...
2026-01-07 21:02:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-123294952283072 | ✓ Saving topographic profile...
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:295 | Thread-123294952283072 | Generating master profile with interval=50.00
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-123294952283072 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-123294952283072 | Spatial Filter: confirmed 0 features intersecting buffer
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-123294952283072 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-123294952283072 | LOD Decimation: 100 -> 2 points (tol=10.00)
2026-01-07 21:02:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-123294952283072 | LOD Decimation: 3 -> 2 points (tol=10.00)
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-123294952283072 | Running geometry operation: test
2026-01-07 21:02:33 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-123294952283072 | Generated 1 drillhole traces
2026-01-07 21:02:33 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-123294952283072 | Drillhole preview skipped: No Collar ID field selected.
2026-01-07 21:02:33 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-123294952283072 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-07 21:02:33 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:109 | Thread-123294952283072 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-07 21:02:33 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:184 | Thread-123294952283072 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 175, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-07 21:02:33 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:296 | Thread-123294952283072 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 285, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 175, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-07 21:02:33 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-123294952283072 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-07 21:02:33 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-123294952283072 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-07 21:02:33 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | export:100 | Thread-123294952283072 | Failed to generate QML style: QgsRendererCategory(): arguments did not match any overloaded call:
  overload 1: too many arguments
  overload 2: argument 3 has unexpected type 'MagicMock'
  overload 3: argument 1 has unexpected type 'MagicMock'
2026-01-07 21:02:33 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-123294952283072 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _configure_3d_renderer:423 | Thread-123294952283072 | Configured native 3D renderer in QML
2026-01-07 21:02:33 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-123294952283072 | Generated QML style: dummy.qml
2026-01-07 21:02:33 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-123294952283072 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _configure_3d_renderer:423 | Thread-123294952283072 | Configured native 3D renderer in QML
2026-01-07 21:02:33 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-123294952283072 | Generated QML style: dummy.qml
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123294952283072 | Global setting fallback: section_layer = 1.0
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123294952283072 | Global setting fallback: section_layer_name = 1.0
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-123294952283072 | Failed to restore layer for section_layer
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123294952283072 | Global setting fallback: buffer_dist = 1.0
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123294952283072 | Global setting fallback: dem_layer = 1.0
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123294952283072 | Global setting fallback: dem_layer_name = 1.0
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-123294952283072 | Failed to restore layer for dem_layer
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123294952283072 | Global setting fallback: dem_band = 1.0
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123294952283072 | Global setting fallback: scale = 1.0
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123294952283072 | Global setting fallback: vert_exag = 1.0
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123294952283072 | Global setting fallback: geol_layer = 1.0
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123294952283072 | Global setting fallback: geol_layer_name = 1.0
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-123294952283072 | Failed to restore layer for geol_layer
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123294952283072 | Global setting fallback: geol_field = 1.0
2026-01-07 21:02:33 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-123294952283072 | Test Title: Test Message
2026-01-07 21:02:33 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-123294952283072 | Test Title: Test Message
2026-01-07 21:02:33 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-123294952283072 | Test Title: Test Message
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123294952283072 | Global setting fallback: buffer_dist = 100.5
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-123294952283072 | Setting saved to project: test_layer = id_123
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-123294952283072 | Setting saved to project: test_layer_name = RealName
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-123294952283072 | create_drillhole_trace_layer called with 1 holes
2026-01-07 21:02:33 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-123294952283072 | Adding 1 drillhole trace features to layer
2026-01-07 21:02:33 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-123294952283072 | Failed to create memory layer: Fail
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123294952283072 | render() called
2026-01-07 21:02:33 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-123294952283072 | No valid layers to render
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123294952283072 | render() called
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123294952283072 | render() called
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123294952283072 | render() called
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123294952283072 | render() called
2026-01-07 21:02:33 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-123294952283072 | No valid layers to render
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123294952283072 | render() called
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123294952283072 | render() called
2026-01-07 21:02:33 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-123294952283072 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-07 21:02:33 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-123294952283072 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123294952283072 | CacheService initialized (Default TTL: 3600s)
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-123294952283072 | ProfileController initialized
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123294952283072 | Global setting fallback: buffer_dist = 100.0
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123294952283072 | Global setting fallback: scale = 50000.0
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123294952283072 | Global setting fallback: vert_exag = 1.0
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123294952283072 | Global setting fallback: dip_scale_factor = 1.0
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123294952283072 | Global setting fallback: auto_lod = True
2026-01-07 21:02:33 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-123294952283072 | Settings loaded successfully from Project/Global config
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:502 | Thread-123294952283072 | Saved 1 interpretations to project
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123294952283072 | CacheService initialized (Default TTL: 3600s)
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-123294952283072 | ProfileController initialized
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123294952283072 | Global setting fallback: buffer_dist = 100.0
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123294952283072 | Global setting fallback: scale = 50000.0
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123294952283072 | Global setting fallback: vert_exag = 1.0
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123294952283072 | Global setting fallback: dip_scale_factor = 1.0
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123294952283072 | Global setting fallback: auto_lod = True
2026-01-07 21:02:33 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-123294952283072 | Settings loaded successfully from Project/Global config
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:502 | Thread-123294952283072 | Saved 1 interpretations to project
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:502 | Thread-123294952283072 | Saved 0 interpretations to project
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123294952283072 | CacheService initialized (Default TTL: 3600s)
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-123294952283072 | ProfileController initialized
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123294952283072 | Global setting fallback: buffer_dist = 100.0
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123294952283072 | Global setting fallback: scale = 50000.0
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123294952283072 | Global setting fallback: vert_exag = 1.0
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123294952283072 | Global setting fallback: dip_scale_factor = 1.0
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123294952283072 | Global setting fallback: auto_lod = True
2026-01-07 21:02:33 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-123294952283072 | Settings loaded successfully from Project/Global config
2026-01-07 21:02:33 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-123294952283072 | Loaded 1 interpretations from project
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-123294952283072 | Point 1 added: 0.00, 0.00
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-123294952283072 | Point 2 added: 10.00, 10.00
2026-01-07 21:02:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-123294952283072 | finalize_measurement called with 2 points
2026-01-07 21:02:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-123294952283072 | Setting finalized = True
2026-01-07 21:02:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-123294952283072 | Measurement finalized: 2 points, 14.14m total distance
2026-01-07 21:02:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-123294952283072 | Rubber band redrawn with final points only
2026-01-07 21:02:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-123294952283072 | Switching to pan tool to stop measurement
2026-01-07 21:02:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-123294952283072 | Pan tool activated - measurement should be frozen
2026-01-07 21:02:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-123294952283072 | reset() called, finalized=True
2026-01-07 21:02:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-123294952283072 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-123294952283072 | Point 1 added: 0.00, 0.00
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-123294952283072 | Point 2 added: 100.00, 100.00
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-123294952283072 | Point 3 added: 200.00, 150.00
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123294952283072 | CacheService initialized (Default TTL: 3600s)
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-123294952283072 | ProfileController initialized
2026-01-07 21:02:33 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-123294952283072 | Loaded 1 interpretations from project
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123294952283072 | Global setting fallback: buffer_dist = 100.0
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123294952283072 | Global setting fallback: scale = 50000.0
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123294952283072 | Global setting fallback: vert_exag = 1.0
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123294952283072 | Global setting fallback: dip_scale_factor = 1.0
2026-01-07 21:02:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-123294952283072 | Global setting fallback: auto_lod = True
2026-01-07 21:02:33 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-123294952283072 | Settings loaded successfully from Project/Global config
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-125478374394816 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:03:38 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:55 | Thread-125478374394816 | GeologyGenerationTask started (Background Thread)
2026-01-07 21:03:38 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:65 | Thread-125478374394816 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 57, in run
    self.result = self.service.process_task_data(
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        self.task_input,
        ^^^^^^^^^^^^^^^^
        feedback=self
        ^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-07 21:03:38 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:55 | Thread-125478374394816 | GeologyGenerationTask started (Background Thread)
2026-01-07 21:03:38 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-125478374394816 | GeologyGenerationTask finished with 1 segments
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:15 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-134975856298944 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-128108001045440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:04:46 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:55 | Thread-128108001045440 | GeologyGenerationTask started (Background Thread)
2026-01-07 21:04:46 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:65 | Thread-128108001045440 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 57, in run
    self.result = self.service.process_task_data(
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        self.task_input,
        ^^^^^^^^^^^^^^^^
        feedback=self
        ^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-07 21:04:46 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:55 | Thread-128108001045440 | GeologyGenerationTask started (Background Thread)
2026-01-07 21:04:46 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-128108001045440 | GeologyGenerationTask finished with 1 segments
2026-01-07 21:34:09 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-140374140599232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:34:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-140374140599232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:34:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-140374140599232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:34:09 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-140374140599232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:34:09 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-140374140599232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:34:09 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-140374140599232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:34:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-140374140599232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:34:09 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:127 | Thread-140374140599232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:34:10 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-140374140599232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:34:10 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-140374140599232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:34:10 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-140374140599232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-07 21:34:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-140374140599232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-131104191929280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-131104191929280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-131104191929280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-131104191929280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-131104191929280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-131104191929280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-131104191929280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-131104191929280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-131104191929280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-131104191929280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-131104191929280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-131104191929280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-131104191929280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-131104191929280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-131104191929280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-131104191929280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-131104191929280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-131104191929280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-131104191929280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-131104191929280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-131104191929280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-131104191929280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-131104191929280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131104191929280 | Config set: SecInterp/scale = 50000.0
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131104191929280 | Config set: SecInterp/vert_exag = 1.0
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131104191929280 | Config set: SecInterp/buffer_dist = 100.0
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131104191929280 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131104191929280 | Config set: SecInterp/last_output_dir = 
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131104191929280 | Config set: SecInterp/dpi = 300
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131104191929280 | Config set: SecInterp/preview_width = 800
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131104191929280 | Config set: SecInterp/preview_height = 600
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131104191929280 | Config set: SecInterp/sampling_interval = 10.0
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131104191929280 | Config set: SecInterp/export_quality = 95
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131104191929280 | Config set: SecInterp/auto_lod = True
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131104191929280 | Config set: SecInterp/max_preview_points = 10000
2026-01-08 05:24:35 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-131104191929280 | Configuration reset to defaults
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131104191929280 | Config set: SecInterp/scale = 200.0
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131104191929280 | CacheService initialized (Default TTL: 3600s)
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131104191929280 | CacheService initialized (Default TTL: 3600s)
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131104191929280 | CacheService initialized (Default TTL: 3600s)
2026-01-08 05:24:35 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-131104191929280 | Projecting collars from Test Layer with buffer 50.0m
2026-01-08 05:24:35 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-131104191929280 | No collars found within buffer area.
2026-01-08 05:24:35 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-131104191929280 | Projecting collars from Test Layer with buffer 50.0m
2026-01-08 05:24:35 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-131104191929280 | DrillholeService.project_collars END: Found 1 collars.
2026-01-08 05:24:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-131104191929280 | ✓ Saving profile axes...
2026-01-08 05:24:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-131104191929280 | ✓ Saving topographic profile...
2026-01-08 05:24:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-131104191929280 | ✓ Saving interpretation data...
2026-01-08 05:24:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-131104191929280 | 3D Export features are restricted for this user.
2026-01-08 05:24:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-131104191929280 | ✓ Saving profile axes...
2026-01-08 05:24:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-131104191929280 | ✓ Saving topographic profile...
2026-01-08 05:24:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-131104191929280 | ✓ Saving interpretation data...
2026-01-08 05:24:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-131104191929280 | ✓ Saving 3D interpretation data...
2026-01-08 05:24:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-131104191929280 | ✓ Saving profile axes...
2026-01-08 05:24:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-131104191929280 | ✓ Saving topographic profile...
2026-01-08 05:24:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-131104191929280 | ✓ Saving geological profile...
2026-01-08 05:24:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-131104191929280 | ✓ Saving structural profile...
2026-01-08 05:24:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-131104191929280 | ✓ Saving drillhole data...
2026-01-08 05:24:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-131104191929280 | ✓ Saving interpretation data...
2026-01-08 05:24:35 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-131104191929280 | Access denied for restricted feature: 3D Export
2026-01-08 05:24:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-131104191929280 | 3D Export features are restricted for this user.
2026-01-08 05:24:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-131104191929280 | ✓ Saving profile axes...
2026-01-08 05:24:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-131104191929280 | ✓ Saving topographic profile...
2026-01-08 05:24:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-131104191929280 | No interpretations provided for export.
2026-01-08 05:24:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-131104191929280 | ✓ Saving profile axes...
2026-01-08 05:24:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-131104191929280 | ✓ Saving drillhole data...
2026-01-08 05:24:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-131104191929280 | ✓ Saving geological profile...
2026-01-08 05:24:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-131104191929280 | ✓ Saving interpretation data...
2026-01-08 05:24:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-131104191929280 | ✓ Saving 3D interpretation data...
2026-01-08 05:24:35 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-131104191929280 | Invalid section line layer, skipping 3D export.
2026-01-08 05:24:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-131104191929280 | ✓ Saving interpretation data...
2026-01-08 05:24:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-131104191929280 | ✓ Saving structural profile...
2026-01-08 05:24:35 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-131104191929280 | ✓ Saving topographic profile...
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:293 | Thread-131104191929280 | Generating master profile with interval=50.00
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-131104191929280 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-131104191929280 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-131104191929280 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-131104191929280 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-131104191929280 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-08 05:24:35 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-131104191929280 | Running geometry operation: test
2026-01-08 05:24:35 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-131104191929280 | Generated 1 drillhole traces
2026-01-08 05:24:36 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-131104191929280 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-08 05:24:36 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-131104191929280 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-08 05:24:36 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-131104191929280 | Generated 1 drillhole traces
2026-01-08 05:24:36 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-131104191929280 | Drillhole preview skipped: No Collar ID field selected.
2026-01-08 05:24:36 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-131104191929280 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 05:24:36 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:109 | Thread-131104191929280 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 05:24:36 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:184 | Thread-131104191929280 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 175, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 05:24:36 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:296 | Thread-131104191929280 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 285, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 175, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 05:24:36 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-131104191929280 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-08 05:24:36 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-131104191929280 | Analyzing structures in Structure Layer with buffer 10m
2026-01-08 05:24:36 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-131104191929280 | Processed 1 structural measurements from Structure Layer
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-125014311680960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-125014311680960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-125014311680960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-125014311680960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-125014311680960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-125014311680960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-125014311680960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-125014311680960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-125014311680960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-125014311680960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-125014311680960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-125014311680960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-125014311680960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-125014311680960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-125014311680960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-125014311680960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-125014311680960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-125014311680960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-125014311680960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-125014311680960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-125014311680960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-125014311680960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-125014311680960 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-125014311680960 | Config set: SecInterp/scale = 50000.0
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-125014311680960 | Config set: SecInterp/vert_exag = 1.0
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-125014311680960 | Config set: SecInterp/buffer_dist = 100.0
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-125014311680960 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-125014311680960 | Config set: SecInterp/last_output_dir = 
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-125014311680960 | Config set: SecInterp/dpi = 300
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-125014311680960 | Config set: SecInterp/preview_width = 800
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-125014311680960 | Config set: SecInterp/preview_height = 600
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-125014311680960 | Config set: SecInterp/sampling_interval = 10.0
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-125014311680960 | Config set: SecInterp/export_quality = 95
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-125014311680960 | Config set: SecInterp/auto_lod = True
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-125014311680960 | Config set: SecInterp/max_preview_points = 10000
2026-01-08 05:24:57 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-125014311680960 | Configuration reset to defaults
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-125014311680960 | Config set: SecInterp/scale = 200.0
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125014311680960 | CacheService initialized (Default TTL: 3600s)
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125014311680960 | CacheService initialized (Default TTL: 3600s)
2026-01-08 05:24:57 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125014311680960 | CacheService initialized (Default TTL: 3600s)
2026-01-08 05:24:57 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-125014311680960 | Projecting collars from Test Layer with buffer 50.0m
2026-01-08 05:24:57 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-125014311680960 | No collars found within buffer area.
2026-01-08 05:24:57 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-125014311680960 | Projecting collars from Test Layer with buffer 50.0m
2026-01-08 05:24:57 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-125014311680960 | DrillholeService.project_collars END: Found 1 collars.
2026-01-08 05:24:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-125014311680960 | ✓ Saving profile axes...
2026-01-08 05:24:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-125014311680960 | ✓ Saving topographic profile...
2026-01-08 05:24:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-125014311680960 | ✓ Saving interpretation data...
2026-01-08 05:24:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-125014311680960 | 3D Export features are restricted for this user.
2026-01-08 05:24:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-125014311680960 | ✓ Saving profile axes...
2026-01-08 05:24:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-125014311680960 | ✓ Saving topographic profile...
2026-01-08 05:24:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-125014311680960 | ✓ Saving interpretation data...
2026-01-08 05:24:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-125014311680960 | ✓ Saving 3D interpretation data...
2026-01-08 05:24:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-125014311680960 | ✓ Saving profile axes...
2026-01-08 05:24:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-125014311680960 | ✓ Saving topographic profile...
2026-01-08 05:24:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-125014311680960 | ✓ Saving geological profile...
2026-01-08 05:24:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-125014311680960 | ✓ Saving structural profile...
2026-01-08 05:24:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-125014311680960 | ✓ Saving drillhole data...
2026-01-08 05:24:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-125014311680960 | ✓ Saving interpretation data...
2026-01-08 05:24:57 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-125014311680960 | Access denied for restricted feature: 3D Export
2026-01-08 05:24:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-125014311680960 | 3D Export features are restricted for this user.
2026-01-08 05:24:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-125014311680960 | ✓ Saving profile axes...
2026-01-08 05:24:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-125014311680960 | ✓ Saving topographic profile...
2026-01-08 05:24:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-125014311680960 | No interpretations provided for export.
2026-01-08 05:24:57 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-125014311680960 | ✓ Saving profile axes...
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-125014311680960 | ✓ Saving drillhole data...
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-125014311680960 | ✓ Saving geological profile...
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-125014311680960 | ✓ Saving interpretation data...
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-125014311680960 | ✓ Saving 3D interpretation data...
2026-01-08 05:24:58 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-125014311680960 | Invalid section line layer, skipping 3D export.
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-125014311680960 | ✓ Saving interpretation data...
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-125014311680960 | ✓ Saving structural profile...
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-125014311680960 | ✓ Saving topographic profile...
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:296 | Thread-125014311680960 | Generating master profile with interval=10.00
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:296 | Thread-125014311680960 | Generating master profile with interval=50.00
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-125014311680960 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-125014311680960 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-125014311680960 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-125014311680960 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-125014311680960 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-125014311680960 | Running geometry operation: test
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-125014311680960 | Generated 1 drillhole traces
2026-01-08 05:24:58 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-125014311680960 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-08 05:24:58 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-125014311680960 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-125014311680960 | Generated 1 drillhole traces
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-125014311680960 | Drillhole preview skipped: No Collar ID field selected.
2026-01-08 05:24:58 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-125014311680960 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 05:24:58 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:109 | Thread-125014311680960 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 05:24:58 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:184 | Thread-125014311680960 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 175, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 05:24:58 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:296 | Thread-125014311680960 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 285, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 175, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 05:24:58 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-125014311680960 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-125014311680960 | Analyzing structures in Structure Layer with buffer 10m
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-125014311680960 | Processed 1 structural measurements from Structure Layer
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-135942726847424 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-135942726847424 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-135942726847424 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-135942726847424 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-135942726847424 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-135942726847424 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-135942726847424 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-135942726847424 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-135942726847424 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-135942726847424 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-135942726847424 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-135942726847424 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-135942726847424 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-135942726847424 | Successfully exported to /tmp/test_dynamic.shp
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-135942726847424 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-135942726847424 | Generated QML style: /tmp/test.qml
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-135942726847424 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-135942726847424 | Generated QML style: dummy.qml
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-135942726847424 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-135942726847424 | Generated QML style: dummy.qml
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-138250639752128 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-138250639752128 | Loaded 0 interpretations from project
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: section_layer = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: section_layer_name = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-138250639752128 | Failed to restore layer for section_layer
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: buffer_dist = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: dem_layer = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: dem_layer_name = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-138250639752128 | Failed to restore layer for dem_layer
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: dem_band = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: scale = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: vert_exag = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: geol_layer = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: geol_layer_name = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-138250639752128 | Failed to restore layer for geol_layer
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: geol_field = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: struct_layer = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: struct_layer_name = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-138250639752128 | Failed to restore layer for struct_layer
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: struct_dip_field = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: struct_strike_field = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: dip_scale_factor = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: dh_collar_layer = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-138250639752128 | Failed to restore layer for dh_collar_layer
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: dh_collar_id = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: dh_use_geom = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: dh_collar_x = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: dh_collar_y = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: dh_collar_z = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: dh_collar_depth = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: dh_survey_layer = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-138250639752128 | Failed to restore layer for dh_survey_layer
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: dh_survey_id = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: dh_survey_depth = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: dh_survey_azim = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: dh_survey_incl = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: dh_interval_layer = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-138250639752128 | Failed to restore layer for dh_interval_layer
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: dh_interval_id = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: dh_interval_from = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: dh_interval_to = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: dh_interval_lith = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: last_output_dir = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: interp_custom_fields = 1.0
2026-01-08 05:24:58 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:176 | Thread-138250639752128 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: show_topo = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: show_geol = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: show_struct = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: show_drillholes = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: show_interpretations = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: auto_lod = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: adaptive_sampling = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: max_points = 1.0
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-138250639752128 | Settings loaded successfully from Project/Global config
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:447 | Thread-138250639752128 | Cache cleared by user
2026-01-08 05:24:58 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-138250639752128 | Test Title: Test Message
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-138250639752128 | Test Title: Test Message
2026-01-08 05:24:58 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-138250639752128 | Test Title: Test Message
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-138250639752128 | CRITICAL_OP: finalize_polygon | points=2
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-138250639752128 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-08 05:24:58 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-138250639752128 | finalize_polygon() aborted - less than 3 points
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-138250639752128 | CRITICAL_OP: finalize_polygon | points=3
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-138250639752128 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-138250639752128 | finalize_polygon() - emitting polygonFinished signal for 572d1635-16a2-4bb5-b900-91c712282ed6
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-138250639752128 | Interpretation polygon finalized with 3 vertices, ID: 572d1635-16a2-4bb5-b900-91c712282ed6
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-138250639752128 | finalize_polygon() completed
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-138250639752128 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-138250639752128 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-138250639752128 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-138250639752128 | ProfileInterpretationTool.reset() completed
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-138250639752128 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-138250639752128 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-138250639752128 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-138250639752128 | ProfileInterpretationTool.reset() completed
2026-01-08 05:24:58 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-138250639752128 | Failed to create locator for layer layer1: mock error
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-138250639752128 | ProfileInterpretationTool.activate() called
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-138250639752128 | ProfileInterpretationTool activated successfully
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-138250639752128 | ProfileInterpretationTool.deactivate() called
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-138250639752128 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-138250639752128 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-138250639752128 | ProfileInterpretationTool.reset() completed
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-138250639752128 | ProfileInterpretationTool deactivated successfully
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: buffer_dist = 100.5
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-138250639752128 | Setting saved to project: test_layer = id_123
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-138250639752128 | Setting saved to project: test_layer_name = RealName
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-138250639752128 | Global setting fallback: test_layer = 1.0
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:363 | Thread-138250639752128 | Project setting hit: test_layer_name = RealName
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:420 | Thread-138250639752128 | Restoring layer: test_layer -> RealName
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-138250639752128 | Point 1 added: 0.00, 0.00
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-138250639752128 | Point 2 added: 100.00, 100.00
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-138250639752128 | Point 1 added: 50.00, 50.00
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-138250639752128 | reset() called, finalized=False
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-138250639752128 | finalize_measurement called with 1 points
2026-01-08 05:24:58 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-138250639752128 | Cannot finalize measurement with less than 2 points
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-138250639752128 | finalize_measurement called with 2 points
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-138250639752128 | Setting finalized = True
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-138250639752128 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-138250639752128 | Switching to pan tool to stop measurement
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-138250639752128 | Pan tool activated - measurement should be frozen
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-138250639752128 | Ignoring click - measurement is finalized
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-138250639752128 | finalize_measurement called with 2 points
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-138250639752128 | Setting finalized = True
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-138250639752128 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-138250639752128 | Switching to pan tool to stop measurement
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-138250639752128 | Pan tool activated - measurement should be frozen
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-138250639752128 | reset() called, finalized=False
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-138250639752128 | reset() called, finalized=False
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-138250639752128 | reset() called, finalized=True
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-138250639752128 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-138250639752128 | reset() called, finalized=False
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-138250639752128 | finalize_measurement called with 2 points
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-138250639752128 | Setting finalized = True
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-138250639752128 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-138250639752128 | Rubber band redrawn with final points only
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-138250639752128 | Switching to pan tool to stop measurement
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-138250639752128 | Pan tool activated - measurement should be frozen
2026-01-08 05:24:58 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-138250639752128 | Failed to create locator for layer layer1: mock error
2026-01-08 05:24:58 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-138250639752128 | Failed to create locator for layer l2: fail
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-138250639752128 | ProfileMeasureTool activated
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-138250639752128 | reset() called, finalized=False
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-138250639752128 | ProfileMeasureTool deactivated
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138250639752128 | create_drillhole_trace_layer called with 1 holes
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-138250639752128 | Adding 1 drillhole trace features to layer
2026-01-08 05:24:58 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-138250639752128 | Failed to create memory layer: Fail
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138250639752128 | create_drillhole_trace_layer called with 0 holes
2026-01-08 05:24:58 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-138250639752128 | No drillhole data provided for trace layer
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138250639752128 | create_drillhole_trace_layer called with 1 holes
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-138250639752128 | Skipping hole H1: insufficient trace points (1)
2026-01-08 05:24:58 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-138250639752128 | Adding 0 drillhole trace features to layer
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138250639752128 | create_drillhole_trace_layer called with 1 holes
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138250639752128 | render() called
2026-01-08 05:24:58 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-138250639752128 | No valid layers to render
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138250639752128 | render() called
2026-01-08 05:24:58 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-138250639752128 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138250639752128 | render() called
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138250639752128 | render() called
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138250639752128 | render() called
2026-01-08 05:24:58 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-138250639752128 | No valid layers to render
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138250639752128 | render() called
2026-01-08 05:24:58 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138250639752128 | render() called
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-138125388151744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-138125388151744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-138125388151744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-138125388151744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-138125388151744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-138125388151744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-138125388151744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-138125388151744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-138125388151744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-138125388151744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-138125388151744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-138125388151744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-138125388151744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-138125388151744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-138125388151744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-138125388151744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-138125388151744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-138125388151744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-138125388151744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-138125388151744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-138125388151744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-138125388151744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-138125388151744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138125388151744 | Config set: SecInterp/scale = 50000.0
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138125388151744 | Config set: SecInterp/vert_exag = 1.0
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138125388151744 | Config set: SecInterp/buffer_dist = 100.0
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138125388151744 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138125388151744 | Config set: SecInterp/last_output_dir = 
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138125388151744 | Config set: SecInterp/dpi = 300
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138125388151744 | Config set: SecInterp/preview_width = 800
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138125388151744 | Config set: SecInterp/preview_height = 600
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138125388151744 | Config set: SecInterp/sampling_interval = 10.0
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138125388151744 | Config set: SecInterp/export_quality = 95
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138125388151744 | Config set: SecInterp/auto_lod = True
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138125388151744 | Config set: SecInterp/max_preview_points = 10000
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-138125388151744 | Configuration reset to defaults
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138125388151744 | Config set: SecInterp/scale = 200.0
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138125388151744 | CacheService initialized (Default TTL: 3600s)
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138125388151744 | CacheService initialized (Default TTL: 3600s)
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138125388151744 | CacheService initialized (Default TTL: 3600s)
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-138125388151744 | Projecting collars from Test Layer with buffer 50.0m
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-138125388151744 | No collars found within buffer area.
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-138125388151744 | Projecting collars from Test Layer with buffer 50.0m
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-138125388151744 | DrillholeService.project_collars END: Found 1 collars.
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-138125388151744 | ✓ Saving profile axes...
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-138125388151744 | ✓ Saving topographic profile...
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-138125388151744 | ✓ Saving interpretation data...
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-138125388151744 | 3D Export features are restricted for this user.
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-138125388151744 | ✓ Saving profile axes...
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-138125388151744 | ✓ Saving topographic profile...
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-138125388151744 | ✓ Saving interpretation data...
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-138125388151744 | ✓ Saving 3D interpretation data...
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-138125388151744 | ✓ Saving profile axes...
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-138125388151744 | ✓ Saving topographic profile...
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-138125388151744 | ✓ Saving geological profile...
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-138125388151744 | ✓ Saving structural profile...
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-138125388151744 | ✓ Saving drillhole data...
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-138125388151744 | ✓ Saving interpretation data...
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-138125388151744 | Access denied for restricted feature: 3D Export
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-138125388151744 | 3D Export features are restricted for this user.
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-138125388151744 | ✓ Saving profile axes...
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-138125388151744 | ✓ Saving topographic profile...
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-138125388151744 | No interpretations provided for export.
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-138125388151744 | ✓ Saving profile axes...
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-138125388151744 | ✓ Saving drillhole data...
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-138125388151744 | ✓ Saving geological profile...
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-138125388151744 | ✓ Saving interpretation data...
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-138125388151744 | ✓ Saving 3D interpretation data...
2026-01-08 05:26:55 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-138125388151744 | Invalid section line layer, skipping 3D export.
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-138125388151744 | ✓ Saving interpretation data...
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-138125388151744 | ✓ Saving structural profile...
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-138125388151744 | ✓ Saving topographic profile...
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:296 | Thread-138125388151744 | Generating master profile with interval=10.00
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:296 | Thread-138125388151744 | Generating master profile with interval=50.00
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-138125388151744 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-138125388151744 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-138125388151744 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-138125388151744 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-138125388151744 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-138125388151744 | Running geometry operation: test
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-138125388151744 | Generated 1 drillhole traces
2026-01-08 05:26:55 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-138125388151744 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-08 05:26:55 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-138125388151744 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-138125388151744 | Generated 1 drillhole traces
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-138125388151744 | Drillhole preview skipped: No Collar ID field selected.
2026-01-08 05:26:55 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-138125388151744 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 05:26:55 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:109 | Thread-138125388151744 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 05:26:55 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:184 | Thread-138125388151744 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 175, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 05:26:55 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:296 | Thread-138125388151744 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 285, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 175, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 05:26:55 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-138125388151744 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-138125388151744 | Analyzing structures in Structure Layer with buffer 10m
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-138125388151744 | Processed 1 structural measurements from Structure Layer
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-132543311485888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-132543311485888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-132543311485888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-132543311485888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-132543311485888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-132543311485888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-132543311485888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-132543311485888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-132543311485888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-132543311485888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-132543311485888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-132543311485888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-132543311485888 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-132543311485888 | Successfully exported to /tmp/test_dynamic.shp
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-132543311485888 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-132543311485888 | Generated QML style: /tmp/test.qml
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-132543311485888 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-132543311485888 | Generated QML style: dummy.qml
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-132543311485888 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 05:26:55 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-132543311485888 | Generated QML style: dummy.qml
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-127609715604416 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:26:56 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-127609715604416 | GeologyGenerationTask started (Background Thread)
2026-01-08 05:26:56 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-127609715604416 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-08 05:26:56 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-127609715604416 | GeologyGenerationTask started (Background Thread)
2026-01-08 05:26:56 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-127609715604416 | GeologyGenerationTask finished with 1 segments
2026-01-08 05:26:56 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-127609715604416 | Test Title: Test Message
2026-01-08 05:26:56 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-127609715604416 | Test Title: Test Message
2026-01-08 05:26:56 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-127609715604416 | Test Title: Test Message
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-127609715604416 | CRITICAL_OP: finalize_polygon | points=2
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-127609715604416 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-08 05:26:56 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-127609715604416 | finalize_polygon() aborted - less than 3 points
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-127609715604416 | CRITICAL_OP: finalize_polygon | points=3
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-127609715604416 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-127609715604416 | finalize_polygon() - emitting polygonFinished signal for 8b64a200-157b-4797-9b97-7a9eb3452784
2026-01-08 05:26:56 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-127609715604416 | Interpretation polygon finalized with 3 vertices, ID: 8b64a200-157b-4797-9b97-7a9eb3452784
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-127609715604416 | finalize_polygon() completed
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-127609715604416 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-127609715604416 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-127609715604416 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-127609715604416 | ProfileInterpretationTool.reset() completed
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-127609715604416 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-127609715604416 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-127609715604416 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-127609715604416 | ProfileInterpretationTool.reset() completed
2026-01-08 05:26:56 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-127609715604416 | Failed to create locator for layer layer1: mock error
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-127609715604416 | ProfileInterpretationTool.activate() called
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-127609715604416 | ProfileInterpretationTool activated successfully
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-127609715604416 | ProfileInterpretationTool.deactivate() called
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-127609715604416 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-127609715604416 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-127609715604416 | ProfileInterpretationTool.reset() completed
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-127609715604416 | ProfileInterpretationTool deactivated successfully
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-127609715604416 | Global setting fallback: buffer_dist = 100.5
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-127609715604416 | Setting saved to project: test_layer = id_123
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-127609715604416 | Setting saved to project: test_layer_name = RealName
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-127609715604416 | Global setting fallback: test_layer = 1.0
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:363 | Thread-127609715604416 | Project setting hit: test_layer_name = RealName
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:420 | Thread-127609715604416 | Restoring layer: test_layer -> RealName
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-127609715604416 | Point 1 added: 0.00, 0.00
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-127609715604416 | Point 2 added: 100.00, 100.00
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-127609715604416 | Point 1 added: 50.00, 50.00
2026-01-08 05:26:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-127609715604416 | reset() called, finalized=False
2026-01-08 05:26:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-127609715604416 | finalize_measurement called with 1 points
2026-01-08 05:26:56 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-127609715604416 | Cannot finalize measurement with less than 2 points
2026-01-08 05:26:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-127609715604416 | finalize_measurement called with 2 points
2026-01-08 05:26:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-127609715604416 | Setting finalized = True
2026-01-08 05:26:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-127609715604416 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 05:26:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-127609715604416 | Switching to pan tool to stop measurement
2026-01-08 05:26:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-127609715604416 | Pan tool activated - measurement should be frozen
2026-01-08 05:26:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-127609715604416 | Ignoring click - measurement is finalized
2026-01-08 05:26:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-127609715604416 | finalize_measurement called with 2 points
2026-01-08 05:26:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-127609715604416 | Setting finalized = True
2026-01-08 05:26:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-127609715604416 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 05:26:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-127609715604416 | Switching to pan tool to stop measurement
2026-01-08 05:26:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-127609715604416 | Pan tool activated - measurement should be frozen
2026-01-08 05:26:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-127609715604416 | reset() called, finalized=False
2026-01-08 05:26:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-127609715604416 | reset() called, finalized=False
2026-01-08 05:26:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-127609715604416 | reset() called, finalized=True
2026-01-08 05:26:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-127609715604416 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-08 05:26:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-127609715604416 | reset() called, finalized=False
2026-01-08 05:26:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-127609715604416 | finalize_measurement called with 2 points
2026-01-08 05:26:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-127609715604416 | Setting finalized = True
2026-01-08 05:26:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-127609715604416 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 05:26:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-127609715604416 | Rubber band redrawn with final points only
2026-01-08 05:26:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-127609715604416 | Switching to pan tool to stop measurement
2026-01-08 05:26:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-127609715604416 | Pan tool activated - measurement should be frozen
2026-01-08 05:26:56 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-127609715604416 | Failed to create locator for layer layer1: mock error
2026-01-08 05:26:56 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-127609715604416 | Failed to create locator for layer l2: fail
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-127609715604416 | ProfileMeasureTool activated
2026-01-08 05:26:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-127609715604416 | reset() called, finalized=False
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-127609715604416 | ProfileMeasureTool deactivated
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-127609715604416 | create_drillhole_trace_layer called with 1 holes
2026-01-08 05:26:56 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-127609715604416 | Adding 1 drillhole trace features to layer
2026-01-08 05:26:56 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-127609715604416 | Failed to create memory layer: Fail
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-127609715604416 | create_drillhole_trace_layer called with 0 holes
2026-01-08 05:26:56 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-127609715604416 | No drillhole data provided for trace layer
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-127609715604416 | create_drillhole_trace_layer called with 1 holes
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-127609715604416 | Skipping hole H1: insufficient trace points (1)
2026-01-08 05:26:56 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-127609715604416 | Adding 0 drillhole trace features to layer
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-127609715604416 | create_drillhole_trace_layer called with 1 holes
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-127609715604416 | render() called
2026-01-08 05:26:56 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-127609715604416 | No valid layers to render
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-127609715604416 | render() called
2026-01-08 05:26:56 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-127609715604416 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-127609715604416 | render() called
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-127609715604416 | render() called
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-127609715604416 | render() called
2026-01-08 05:26:56 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-127609715604416 | No valid layers to render
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-127609715604416 | render() called
2026-01-08 05:26:56 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-127609715604416 | render() called
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-128257704299456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-128257704299456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-128257704299456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-128257704299456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-128257704299456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-128257704299456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-128257704299456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-128257704299456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-128257704299456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-128257704299456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-128257704299456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-128257704299456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-128257704299456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-128257704299456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-128257704299456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-128257704299456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-128257704299456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-128257704299456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-128257704299456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-128257704299456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-128257704299456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-128257704299456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-128257704299456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-128257704299456 | Config set: SecInterp/scale = 50000.0
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-128257704299456 | Config set: SecInterp/vert_exag = 1.0
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-128257704299456 | Config set: SecInterp/buffer_dist = 100.0
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-128257704299456 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-128257704299456 | Config set: SecInterp/last_output_dir = 
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-128257704299456 | Config set: SecInterp/dpi = 300
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-128257704299456 | Config set: SecInterp/preview_width = 800
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-128257704299456 | Config set: SecInterp/preview_height = 600
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-128257704299456 | Config set: SecInterp/sampling_interval = 10.0
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-128257704299456 | Config set: SecInterp/export_quality = 95
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-128257704299456 | Config set: SecInterp/auto_lod = True
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-128257704299456 | Config set: SecInterp/max_preview_points = 10000
2026-01-08 05:27:14 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-128257704299456 | Configuration reset to defaults
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-128257704299456 | Config set: SecInterp/scale = 200.0
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128257704299456 | CacheService initialized (Default TTL: 3600s)
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128257704299456 | CacheService initialized (Default TTL: 3600s)
2026-01-08 05:27:14 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128257704299456 | CacheService initialized (Default TTL: 3600s)
2026-01-08 05:27:14 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-128257704299456 | Projecting collars from Test Layer with buffer 50.0m
2026-01-08 05:27:14 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-128257704299456 | No collars found within buffer area.
2026-01-08 05:27:14 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-128257704299456 | Projecting collars from Test Layer with buffer 50.0m
2026-01-08 05:27:14 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-128257704299456 | DrillholeService.project_collars END: Found 1 collars.
2026-01-08 05:27:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-128257704299456 | ✓ Saving profile axes...
2026-01-08 05:27:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-128257704299456 | ✓ Saving topographic profile...
2026-01-08 05:27:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-128257704299456 | ✓ Saving interpretation data...
2026-01-08 05:27:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-128257704299456 | 3D Export features are restricted for this user.
2026-01-08 05:27:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-128257704299456 | ✓ Saving profile axes...
2026-01-08 05:27:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-128257704299456 | ✓ Saving topographic profile...
2026-01-08 05:27:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-128257704299456 | ✓ Saving interpretation data...
2026-01-08 05:27:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-128257704299456 | ✓ Saving 3D interpretation data...
2026-01-08 05:27:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-128257704299456 | ✓ Saving profile axes...
2026-01-08 05:27:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-128257704299456 | ✓ Saving topographic profile...
2026-01-08 05:27:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-128257704299456 | ✓ Saving geological profile...
2026-01-08 05:27:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-128257704299456 | ✓ Saving structural profile...
2026-01-08 05:27:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-128257704299456 | ✓ Saving drillhole data...
2026-01-08 05:27:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-128257704299456 | ✓ Saving interpretation data...
2026-01-08 05:27:14 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-128257704299456 | Access denied for restricted feature: 3D Export
2026-01-08 05:27:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-128257704299456 | 3D Export features are restricted for this user.
2026-01-08 05:27:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-128257704299456 | ✓ Saving profile axes...
2026-01-08 05:27:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-128257704299456 | ✓ Saving topographic profile...
2026-01-08 05:27:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-128257704299456 | No interpretations provided for export.
2026-01-08 05:27:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-128257704299456 | ✓ Saving profile axes...
2026-01-08 05:27:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-128257704299456 | ✓ Saving drillhole data...
2026-01-08 05:27:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-128257704299456 | ✓ Saving geological profile...
2026-01-08 05:27:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-128257704299456 | ✓ Saving interpretation data...
2026-01-08 05:27:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-128257704299456 | ✓ Saving 3D interpretation data...
2026-01-08 05:27:14 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-128257704299456 | Invalid section line layer, skipping 3D export.
2026-01-08 05:27:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-128257704299456 | ✓ Saving interpretation data...
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-128257704299456 | ✓ Saving structural profile...
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-128257704299456 | ✓ Saving topographic profile...
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:296 | Thread-128257704299456 | Generating master profile with interval=10.00
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:296 | Thread-128257704299456 | Generating master profile with interval=50.00
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-128257704299456 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-128257704299456 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-128257704299456 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-128257704299456 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-128257704299456 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-128257704299456 | Running geometry operation: test
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-128257704299456 | Generated 1 drillhole traces
2026-01-08 05:27:15 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-128257704299456 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-08 05:27:15 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-128257704299456 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-128257704299456 | Generated 1 drillhole traces
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-128257704299456 | Drillhole preview skipped: No Collar ID field selected.
2026-01-08 05:27:15 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-128257704299456 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 05:27:15 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:109 | Thread-128257704299456 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 05:27:15 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:184 | Thread-128257704299456 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 175, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 05:27:15 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:296 | Thread-128257704299456 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 285, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 175, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 05:27:15 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-128257704299456 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-128257704299456 | Analyzing structures in Structure Layer with buffer 10m
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-128257704299456 | Processed 1 structural measurements from Structure Layer
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-124376806566848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-124376806566848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-124376806566848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-124376806566848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-124376806566848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-124376806566848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-124376806566848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-124376806566848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-124376806566848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-124376806566848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-124376806566848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-124376806566848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-124376806566848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-124376806566848 | Successfully exported to /tmp/test_dynamic.shp
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-124376806566848 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-124376806566848 | Generated QML style: /tmp/test.qml
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-124376806566848 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-124376806566848 | Generated QML style: dummy.qml
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-124376806566848 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-124376806566848 | Generated QML style: dummy.qml
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-128752706157504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-128752706157504 | GeologyGenerationTask started (Background Thread)
2026-01-08 05:27:15 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-128752706157504 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-128752706157504 | GeologyGenerationTask started (Background Thread)
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-128752706157504 | GeologyGenerationTask finished with 1 segments
2026-01-08 05:27:15 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-128752706157504 | Test Title: Test Message
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-128752706157504 | Test Title: Test Message
2026-01-08 05:27:15 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-128752706157504 | Test Title: Test Message
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-128752706157504 | CRITICAL_OP: finalize_polygon | points=2
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-128752706157504 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-08 05:27:15 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-128752706157504 | finalize_polygon() aborted - less than 3 points
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-128752706157504 | CRITICAL_OP: finalize_polygon | points=3
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-128752706157504 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-128752706157504 | finalize_polygon() - emitting polygonFinished signal for ce032c7d-ac69-4f61-a7d1-e8f92fcc37ab
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-128752706157504 | Interpretation polygon finalized with 3 vertices, ID: ce032c7d-ac69-4f61-a7d1-e8f92fcc37ab
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-128752706157504 | finalize_polygon() completed
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-128752706157504 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-128752706157504 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-128752706157504 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-128752706157504 | ProfileInterpretationTool.reset() completed
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-128752706157504 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-128752706157504 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-128752706157504 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-128752706157504 | ProfileInterpretationTool.reset() completed
2026-01-08 05:27:15 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-128752706157504 | Failed to create locator for layer layer1: mock error
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-128752706157504 | ProfileInterpretationTool.activate() called
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-128752706157504 | ProfileInterpretationTool activated successfully
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-128752706157504 | ProfileInterpretationTool.deactivate() called
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-128752706157504 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-128752706157504 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-128752706157504 | ProfileInterpretationTool.reset() completed
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-128752706157504 | ProfileInterpretationTool deactivated successfully
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128752706157504 | Global setting fallback: buffer_dist = 100.5
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-128752706157504 | Setting saved to project: test_layer = id_123
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-128752706157504 | Setting saved to project: test_layer_name = RealName
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-128752706157504 | Global setting fallback: test_layer = 1.0
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:363 | Thread-128752706157504 | Project setting hit: test_layer_name = RealName
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:420 | Thread-128752706157504 | Restoring layer: test_layer -> RealName
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-128752706157504 | Point 1 added: 0.00, 0.00
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-128752706157504 | Point 2 added: 100.00, 100.00
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-128752706157504 | Point 1 added: 50.00, 50.00
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-128752706157504 | reset() called, finalized=False
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-128752706157504 | finalize_measurement called with 1 points
2026-01-08 05:27:15 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-128752706157504 | Cannot finalize measurement with less than 2 points
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-128752706157504 | finalize_measurement called with 2 points
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-128752706157504 | Setting finalized = True
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-128752706157504 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-128752706157504 | Switching to pan tool to stop measurement
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-128752706157504 | Pan tool activated - measurement should be frozen
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-128752706157504 | Ignoring click - measurement is finalized
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-128752706157504 | finalize_measurement called with 2 points
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-128752706157504 | Setting finalized = True
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-128752706157504 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-128752706157504 | Switching to pan tool to stop measurement
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-128752706157504 | Pan tool activated - measurement should be frozen
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-128752706157504 | reset() called, finalized=False
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-128752706157504 | reset() called, finalized=False
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-128752706157504 | reset() called, finalized=True
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-128752706157504 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-128752706157504 | reset() called, finalized=False
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-128752706157504 | finalize_measurement called with 2 points
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-128752706157504 | Setting finalized = True
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-128752706157504 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-128752706157504 | Rubber band redrawn with final points only
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-128752706157504 | Switching to pan tool to stop measurement
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-128752706157504 | Pan tool activated - measurement should be frozen
2026-01-08 05:27:15 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-128752706157504 | Failed to create locator for layer layer1: mock error
2026-01-08 05:27:15 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-128752706157504 | Failed to create locator for layer l2: fail
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-128752706157504 | ProfileMeasureTool activated
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-128752706157504 | reset() called, finalized=False
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-128752706157504 | ProfileMeasureTool deactivated
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-128752706157504 | create_drillhole_trace_layer called with 1 holes
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-128752706157504 | Adding 1 drillhole trace features to layer
2026-01-08 05:27:15 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-128752706157504 | Failed to create memory layer: Fail
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-128752706157504 | create_drillhole_trace_layer called with 0 holes
2026-01-08 05:27:15 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-128752706157504 | No drillhole data provided for trace layer
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-128752706157504 | create_drillhole_trace_layer called with 1 holes
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-128752706157504 | Skipping hole H1: insufficient trace points (1)
2026-01-08 05:27:15 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-128752706157504 | Adding 0 drillhole trace features to layer
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-128752706157504 | create_drillhole_trace_layer called with 1 holes
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128752706157504 | render() called
2026-01-08 05:27:15 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-128752706157504 | No valid layers to render
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128752706157504 | render() called
2026-01-08 05:27:15 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-128752706157504 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128752706157504 | render() called
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128752706157504 | render() called
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128752706157504 | render() called
2026-01-08 05:27:15 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-128752706157504 | No valid layers to render
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128752706157504 | render() called
2026-01-08 05:27:15 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128752706157504 | render() called
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-135680928287680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-135680928287680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-135680928287680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-135680928287680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-135680928287680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-135680928287680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-135680928287680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-135680928287680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-135680928287680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-135680928287680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-135680928287680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-135680928287680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-135680928287680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-135680928287680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-135680928287680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-135680928287680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-135680928287680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-135680928287680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-135680928287680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-135680928287680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-135680928287680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-135680928287680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-135680928287680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-135680928287680 | Config set: SecInterp/scale = 50000.0
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-135680928287680 | Config set: SecInterp/vert_exag = 1.0
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-135680928287680 | Config set: SecInterp/buffer_dist = 100.0
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-135680928287680 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-135680928287680 | Config set: SecInterp/last_output_dir = 
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-135680928287680 | Config set: SecInterp/dpi = 300
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-135680928287680 | Config set: SecInterp/preview_width = 800
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-135680928287680 | Config set: SecInterp/preview_height = 600
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-135680928287680 | Config set: SecInterp/sampling_interval = 10.0
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-135680928287680 | Config set: SecInterp/export_quality = 95
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-135680928287680 | Config set: SecInterp/auto_lod = True
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-135680928287680 | Config set: SecInterp/max_preview_points = 10000
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-135680928287680 | Configuration reset to defaults
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-135680928287680 | Config set: SecInterp/scale = 200.0
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135680928287680 | CacheService initialized (Default TTL: 3600s)
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135680928287680 | CacheService initialized (Default TTL: 3600s)
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135680928287680 | CacheService initialized (Default TTL: 3600s)
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-135680928287680 | Projecting collars from Test Layer with buffer 50.0m
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-135680928287680 | No collars found within buffer area.
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-135680928287680 | Projecting collars from Test Layer with buffer 50.0m
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-135680928287680 | DrillholeService.project_collars END: Found 1 collars.
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-135680928287680 | ✓ Saving profile axes...
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-135680928287680 | ✓ Saving topographic profile...
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-135680928287680 | ✓ Saving interpretation data...
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-135680928287680 | 3D Export features are restricted for this user.
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-135680928287680 | ✓ Saving profile axes...
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-135680928287680 | ✓ Saving topographic profile...
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-135680928287680 | ✓ Saving interpretation data...
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-135680928287680 | ✓ Saving 3D interpretation data...
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-135680928287680 | ✓ Saving profile axes...
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-135680928287680 | ✓ Saving topographic profile...
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-135680928287680 | ✓ Saving geological profile...
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-135680928287680 | ✓ Saving structural profile...
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-135680928287680 | ✓ Saving drillhole data...
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-135680928287680 | ✓ Saving interpretation data...
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-135680928287680 | Access denied for restricted feature: 3D Export
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-135680928287680 | 3D Export features are restricted for this user.
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-135680928287680 | ✓ Saving profile axes...
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-135680928287680 | ✓ Saving topographic profile...
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-135680928287680 | No interpretations provided for export.
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-135680928287680 | ✓ Saving profile axes...
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-135680928287680 | ✓ Saving drillhole data...
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-135680928287680 | ✓ Saving geological profile...
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-135680928287680 | ✓ Saving interpretation data...
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-135680928287680 | ✓ Saving 3D interpretation data...
2026-01-08 05:27:30 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-135680928287680 | Invalid section line layer, skipping 3D export.
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-135680928287680 | ✓ Saving interpretation data...
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-135680928287680 | ✓ Saving structural profile...
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-135680928287680 | ✓ Saving topographic profile...
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:296 | Thread-135680928287680 | Generating master profile with interval=10.00
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:296 | Thread-135680928287680 | Generating master profile with interval=50.00
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-135680928287680 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-135680928287680 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-135680928287680 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-135680928287680 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-135680928287680 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-08 05:27:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-135680928287680 | Running geometry operation: test
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-135680928287680 | Generated 1 drillhole traces
2026-01-08 05:27:30 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-135680928287680 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-08 05:27:30 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-135680928287680 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-135680928287680 | Generated 1 drillhole traces
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-135680928287680 | Drillhole preview skipped: No Collar ID field selected.
2026-01-08 05:27:30 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-135680928287680 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 05:27:30 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:109 | Thread-135680928287680 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 05:27:30 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:184 | Thread-135680928287680 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 175, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 05:27:30 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:296 | Thread-135680928287680 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 285, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 175, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 05:27:30 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-135680928287680 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-135680928287680 | Analyzing structures in Structure Layer with buffer 10m
2026-01-08 05:27:30 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-135680928287680 | Processed 1 structural measurements from Structure Layer
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-135767360756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-135767360756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-135767360756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-135767360756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-135767360756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-135767360756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-135767360756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-135767360756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-135767360756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-135767360756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-135767360756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-135767360756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-135767360756672 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-135767360756672 | Successfully exported to /tmp/test_dynamic.shp
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-135767360756672 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-135767360756672 | Generated QML style: /tmp/test.qml
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-135767360756672 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-135767360756672 | Generated QML style: dummy.qml
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-135767360756672 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-135767360756672 | Generated QML style: dummy.qml
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-124541881646016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-124541881646016 | Loaded 0 interpretations from project
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: section_layer = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: section_layer_name = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-124541881646016 | Failed to restore layer for section_layer
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: buffer_dist = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: dem_layer = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: dem_layer_name = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-124541881646016 | Failed to restore layer for dem_layer
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: dem_band = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: scale = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: vert_exag = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: geol_layer = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: geol_layer_name = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-124541881646016 | Failed to restore layer for geol_layer
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: geol_field = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: struct_layer = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: struct_layer_name = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-124541881646016 | Failed to restore layer for struct_layer
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: struct_dip_field = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: struct_strike_field = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: dip_scale_factor = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: dh_collar_layer = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-124541881646016 | Failed to restore layer for dh_collar_layer
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: dh_collar_id = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: dh_use_geom = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: dh_collar_x = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: dh_collar_y = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: dh_collar_z = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: dh_collar_depth = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: dh_survey_layer = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-124541881646016 | Failed to restore layer for dh_survey_layer
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: dh_survey_id = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: dh_survey_depth = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: dh_survey_azim = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: dh_survey_incl = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: dh_interval_layer = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-124541881646016 | Failed to restore layer for dh_interval_layer
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: dh_interval_id = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: dh_interval_from = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: dh_interval_to = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: dh_interval_lith = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: last_output_dir = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: interp_custom_fields = 1.0
2026-01-08 05:27:31 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:176 | Thread-124541881646016 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: show_topo = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: show_geol = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: show_struct = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: show_drillholes = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: show_interpretations = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: auto_lod = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: adaptive_sampling = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: max_points = 1.0
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-124541881646016 | Settings loaded successfully from Project/Global config
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:447 | Thread-124541881646016 | Cache cleared by user
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-124541881646016 | GeologyGenerationTask started (Background Thread)
2026-01-08 05:27:31 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-124541881646016 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-124541881646016 | GeologyGenerationTask started (Background Thread)
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-124541881646016 | GeologyGenerationTask finished with 1 segments
2026-01-08 05:27:31 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-124541881646016 | Test Title: Test Message
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-124541881646016 | Test Title: Test Message
2026-01-08 05:27:31 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-124541881646016 | Test Title: Test Message
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-124541881646016 | CRITICAL_OP: finalize_polygon | points=2
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-124541881646016 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-08 05:27:31 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-124541881646016 | finalize_polygon() aborted - less than 3 points
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-124541881646016 | CRITICAL_OP: finalize_polygon | points=3
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-124541881646016 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-124541881646016 | finalize_polygon() - emitting polygonFinished signal for 3b8f4ad1-afd5-4f46-8921-74d12d0253d7
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-124541881646016 | Interpretation polygon finalized with 3 vertices, ID: 3b8f4ad1-afd5-4f46-8921-74d12d0253d7
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-124541881646016 | finalize_polygon() completed
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-124541881646016 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-124541881646016 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-124541881646016 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-124541881646016 | ProfileInterpretationTool.reset() completed
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-124541881646016 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-124541881646016 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-124541881646016 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-124541881646016 | ProfileInterpretationTool.reset() completed
2026-01-08 05:27:31 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-124541881646016 | Failed to create locator for layer layer1: mock error
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-124541881646016 | ProfileInterpretationTool.activate() called
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-124541881646016 | ProfileInterpretationTool activated successfully
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-124541881646016 | ProfileInterpretationTool.deactivate() called
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-124541881646016 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-124541881646016 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-124541881646016 | ProfileInterpretationTool.reset() completed
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-124541881646016 | ProfileInterpretationTool deactivated successfully
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: buffer_dist = 100.5
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-124541881646016 | Setting saved to project: test_layer = id_123
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-124541881646016 | Setting saved to project: test_layer_name = RealName
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-124541881646016 | Global setting fallback: test_layer = 1.0
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:363 | Thread-124541881646016 | Project setting hit: test_layer_name = RealName
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:420 | Thread-124541881646016 | Restoring layer: test_layer -> RealName
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-124541881646016 | Point 1 added: 0.00, 0.00
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-124541881646016 | Point 2 added: 100.00, 100.00
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-124541881646016 | Point 1 added: 50.00, 50.00
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-124541881646016 | reset() called, finalized=False
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-124541881646016 | finalize_measurement called with 1 points
2026-01-08 05:27:31 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-124541881646016 | Cannot finalize measurement with less than 2 points
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-124541881646016 | finalize_measurement called with 2 points
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-124541881646016 | Setting finalized = True
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124541881646016 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-124541881646016 | Switching to pan tool to stop measurement
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-124541881646016 | Pan tool activated - measurement should be frozen
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-124541881646016 | Ignoring click - measurement is finalized
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-124541881646016 | finalize_measurement called with 2 points
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-124541881646016 | Setting finalized = True
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124541881646016 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-124541881646016 | Switching to pan tool to stop measurement
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-124541881646016 | Pan tool activated - measurement should be frozen
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-124541881646016 | reset() called, finalized=False
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-124541881646016 | reset() called, finalized=False
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-124541881646016 | reset() called, finalized=True
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-124541881646016 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-124541881646016 | reset() called, finalized=False
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-124541881646016 | finalize_measurement called with 2 points
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-124541881646016 | Setting finalized = True
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124541881646016 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-124541881646016 | Rubber band redrawn with final points only
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-124541881646016 | Switching to pan tool to stop measurement
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-124541881646016 | Pan tool activated - measurement should be frozen
2026-01-08 05:27:31 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-124541881646016 | Failed to create locator for layer layer1: mock error
2026-01-08 05:27:31 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-124541881646016 | Failed to create locator for layer l2: fail
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-124541881646016 | ProfileMeasureTool activated
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-124541881646016 | reset() called, finalized=False
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-124541881646016 | ProfileMeasureTool deactivated
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124541881646016 | create_drillhole_trace_layer called with 1 holes
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-124541881646016 | Adding 1 drillhole trace features to layer
2026-01-08 05:27:31 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-124541881646016 | Failed to create memory layer: Fail
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124541881646016 | create_drillhole_trace_layer called with 0 holes
2026-01-08 05:27:31 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-124541881646016 | No drillhole data provided for trace layer
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124541881646016 | create_drillhole_trace_layer called with 1 holes
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-124541881646016 | Skipping hole H1: insufficient trace points (1)
2026-01-08 05:27:31 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-124541881646016 | Adding 0 drillhole trace features to layer
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124541881646016 | create_drillhole_trace_layer called with 1 holes
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124541881646016 | render() called
2026-01-08 05:27:31 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-124541881646016 | No valid layers to render
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124541881646016 | render() called
2026-01-08 05:27:31 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-124541881646016 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124541881646016 | render() called
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124541881646016 | render() called
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124541881646016 | render() called
2026-01-08 05:27:31 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-124541881646016 | No valid layers to render
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124541881646016 | render() called
2026-01-08 05:27:31 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124541881646016 | render() called
2026-01-08 05:28:36 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-126965710162880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:28:36 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-126965710162880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:28:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-126965710162880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:28:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-126965710162880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:28:36 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-126965710162880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:28:36 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-126965710162880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:28:36 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-126965710162880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:28:36 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-126965710162880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:28:36 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-126965710162880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:28:36 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-126965710162880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:28:36 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-126965710162880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:28:36 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-126965710162880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:28:36 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-126965710162880 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:28:36 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-126965710162880 | Successfully exported to /tmp/test_dynamic.shp
2026-01-08 05:28:36 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-126965710162880 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 05:28:36 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-126965710162880 | Generated QML style: /tmp/test.qml
2026-01-08 05:28:36 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-126965710162880 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-08 05:28:36 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-126965710162880 | Generated QML style: dummy.qml
2026-01-08 05:28:36 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-126965710162880 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 05:28:36 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-126965710162880 | Generated QML style: dummy.qml
2026-01-08 05:29:29 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-130481974582208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:29:29 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-130481974582208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:29:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-130481974582208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:29:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-130481974582208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:29:29 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-130481974582208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:29:29 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-130481974582208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:29:29 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-130481974582208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:29:29 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-130481974582208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:29:29 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-130481974582208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:29:29 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-130481974582208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:29:29 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-130481974582208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:29:29 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-130481974582208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:29:29 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-130481974582208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:29:29 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-130481974582208 | Successfully exported to /tmp/test_dynamic.shp
2026-01-08 05:29:29 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-130481974582208 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 05:29:29 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-130481974582208 | Generated QML style: /tmp/test.qml
2026-01-08 05:29:29 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-130481974582208 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-08 05:29:29 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-130481974582208 | Generated QML style: dummy.qml
2026-01-08 05:29:29 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-130481974582208 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 05:29:29 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-130481974582208 | Generated QML style: dummy.qml
2026-01-08 05:30:26 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-136603162917824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:30:26 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-136603162917824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:30:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-136603162917824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:30:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-136603162917824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:30:26 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-136603162917824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:30:26 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-136603162917824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:30:26 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-136603162917824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:30:26 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-136603162917824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:30:26 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-136603162917824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:30:26 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-136603162917824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:30:26 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-136603162917824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:30:26 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-136603162917824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:30:26 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-136603162917824 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:30:26 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-136603162917824 | Successfully exported to /tmp/test_dynamic.shp
2026-01-08 05:30:26 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-136603162917824 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 05:30:26 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-136603162917824 | Generated QML style: /tmp/test.qml
2026-01-08 05:30:26 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-136603162917824 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-08 05:30:26 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-136603162917824 | Generated QML style: dummy.qml
2026-01-08 05:30:26 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:326 | Thread-136603162917824 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 05:30:26 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:174 | Thread-136603162917824 | Generated QML style: dummy.qml
2026-01-08 05:31:41 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-130990584531904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:31:41 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-130990584531904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:31:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-130990584531904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:31:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-130990584531904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:31:41 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-130990584531904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:31:41 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-130990584531904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:31:41 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-130990584531904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:31:41 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-130990584531904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:31:41 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-130990584531904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:31:41 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-130990584531904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:31:41 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-130990584531904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:31:41 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-130990584531904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:31:41 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-130990584531904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:31:41 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-130990584531904 | Successfully exported to /tmp/test_dynamic.shp
2026-01-08 05:31:41 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:332 | Thread-130990584531904 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 05:31:41 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:149 | Thread-130990584531904 | Generated QML style: /tmp/test.qml
2026-01-08 05:31:41 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:332 | Thread-130990584531904 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-08 05:31:42 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:149 | Thread-130990584531904 | Generated QML style: dummy.qml
2026-01-08 05:31:42 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:332 | Thread-130990584531904 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 05:31:42 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:149 | Thread-130990584531904 | Generated QML style: dummy.qml
2026-01-08 05:32:09 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-136318156000192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:32:09 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-136318156000192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:32:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-136318156000192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:32:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-136318156000192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:32:09 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-136318156000192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:32:09 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-136318156000192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:32:09 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-136318156000192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:32:09 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-136318156000192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:32:09 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-136318156000192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:32:09 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-136318156000192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:32:09 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-136318156000192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:32:09 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-136318156000192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:32:09 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-136318156000192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:32:09 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-136318156000192 | Successfully exported to /tmp/test_dynamic.shp
2026-01-08 05:32:09 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:354 | Thread-136318156000192 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 05:32:09 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:149 | Thread-136318156000192 | Generated QML style: /tmp/test.qml
2026-01-08 05:32:09 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:354 | Thread-136318156000192 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-08 05:32:09 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:149 | Thread-136318156000192 | Generated QML style: dummy.qml
2026-01-08 05:32:09 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:354 | Thread-136318156000192 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 05:32:09 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:149 | Thread-136318156000192 | Generated QML style: dummy.qml
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-131185778219968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-131185778219968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-131185778219968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-131185778219968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-131185778219968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-131185778219968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-131185778219968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-131185778219968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-131185778219968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-131185778219968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-131185778219968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-131185778219968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-131185778219968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-131185778219968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-131185778219968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-131185778219968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-131185778219968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-131185778219968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-131185778219968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-131185778219968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-131185778219968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-131185778219968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-131185778219968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131185778219968 | Config set: SecInterp/scale = 50000.0
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131185778219968 | Config set: SecInterp/vert_exag = 1.0
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131185778219968 | Config set: SecInterp/buffer_dist = 100.0
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131185778219968 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131185778219968 | Config set: SecInterp/last_output_dir = 
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131185778219968 | Config set: SecInterp/dpi = 300
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131185778219968 | Config set: SecInterp/preview_width = 800
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131185778219968 | Config set: SecInterp/preview_height = 600
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131185778219968 | Config set: SecInterp/sampling_interval = 10.0
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131185778219968 | Config set: SecInterp/export_quality = 95
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131185778219968 | Config set: SecInterp/auto_lod = True
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131185778219968 | Config set: SecInterp/max_preview_points = 10000
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-131185778219968 | Configuration reset to defaults
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131185778219968 | Config set: SecInterp/scale = 200.0
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131185778219968 | CacheService initialized (Default TTL: 3600s)
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131185778219968 | CacheService initialized (Default TTL: 3600s)
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131185778219968 | CacheService initialized (Default TTL: 3600s)
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-131185778219968 | Projecting collars from Test Layer with buffer 50.0m
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-131185778219968 | No collars found within buffer area.
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-131185778219968 | Projecting collars from Test Layer with buffer 50.0m
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-131185778219968 | DrillholeService.project_collars END: Found 1 collars.
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-131185778219968 | ✓ Saving profile axes...
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-131185778219968 | ✓ Saving topographic profile...
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-131185778219968 | ✓ Saving interpretation data...
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-131185778219968 | 3D Export features are restricted for this user.
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-131185778219968 | ✓ Saving profile axes...
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-131185778219968 | ✓ Saving topographic profile...
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-131185778219968 | ✓ Saving interpretation data...
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-131185778219968 | ✓ Saving 3D interpretation data...
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-131185778219968 | ✓ Saving profile axes...
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-131185778219968 | ✓ Saving topographic profile...
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-131185778219968 | ✓ Saving geological profile...
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-131185778219968 | ✓ Saving structural profile...
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-131185778219968 | ✓ Saving drillhole data...
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-131185778219968 | ✓ Saving interpretation data...
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-131185778219968 | Access denied for restricted feature: 3D Export
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-131185778219968 | 3D Export features are restricted for this user.
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-131185778219968 | ✓ Saving profile axes...
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-131185778219968 | ✓ Saving topographic profile...
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-131185778219968 | No interpretations provided for export.
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-131185778219968 | ✓ Saving profile axes...
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-131185778219968 | ✓ Saving drillhole data...
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-131185778219968 | ✓ Saving geological profile...
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-131185778219968 | ✓ Saving interpretation data...
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-131185778219968 | ✓ Saving 3D interpretation data...
2026-01-08 05:35:19 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-131185778219968 | Invalid section line layer, skipping 3D export.
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-131185778219968 | ✓ Saving interpretation data...
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-131185778219968 | ✓ Saving structural profile...
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-131185778219968 | ✓ Saving topographic profile...
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:296 | Thread-131185778219968 | Generating master profile with interval=10.00
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:296 | Thread-131185778219968 | Generating master profile with interval=50.00
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-131185778219968 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-131185778219968 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-131185778219968 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-131185778219968 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-131185778219968 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-08 05:35:19 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-131185778219968 | Running geometry operation: test
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-131185778219968 | Generated 1 drillhole traces
2026-01-08 05:35:19 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-131185778219968 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-08 05:35:19 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-131185778219968 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-131185778219968 | Generated 1 drillhole traces
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-131185778219968 | Drillhole preview skipped: No Collar ID field selected.
2026-01-08 05:35:19 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-131185778219968 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 05:35:19 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-131185778219968 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 05:35:19 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:193 | Thread-131185778219968 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 188, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 05:35:19 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-131185778219968 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 188, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 05:35:19 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-131185778219968 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-131185778219968 | Analyzing structures in Structure Layer with buffer 10m
2026-01-08 05:35:19 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-131185778219968 | Processed 1 structural measurements from Structure Layer
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-138284805893056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-138284805893056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-138284805893056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-138284805893056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-138284805893056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-138284805893056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-138284805893056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-138284805893056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-138284805893056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-138284805893056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-138284805893056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-138284805893056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-138284805893056 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-138284805893056 | Successfully exported to /tmp/test_dynamic.shp
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:354 | Thread-138284805893056 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:149 | Thread-138284805893056 | Generated QML style: /tmp/test.qml
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:354 | Thread-138284805893056 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:149 | Thread-138284805893056 | Generated QML style: dummy.qml
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:354 | Thread-138284805893056 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:149 | Thread-138284805893056 | Generated QML style: dummy.qml
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-140301011020736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-140301011020736 | Loaded 0 interpretations from project
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: section_layer = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: section_layer_name = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-140301011020736 | Failed to restore layer for section_layer
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: buffer_dist = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: dem_layer = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: dem_layer_name = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-140301011020736 | Failed to restore layer for dem_layer
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: dem_band = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: scale = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: vert_exag = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: geol_layer = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: geol_layer_name = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-140301011020736 | Failed to restore layer for geol_layer
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: geol_field = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: struct_layer = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: struct_layer_name = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-140301011020736 | Failed to restore layer for struct_layer
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: struct_dip_field = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: struct_strike_field = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: dip_scale_factor = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: dh_collar_layer = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-140301011020736 | Failed to restore layer for dh_collar_layer
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: dh_collar_id = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: dh_use_geom = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: dh_collar_x = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: dh_collar_y = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: dh_collar_z = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: dh_collar_depth = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: dh_survey_layer = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-140301011020736 | Failed to restore layer for dh_survey_layer
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: dh_survey_id = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: dh_survey_depth = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: dh_survey_azim = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: dh_survey_incl = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: dh_interval_layer = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-140301011020736 | Failed to restore layer for dh_interval_layer
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: dh_interval_id = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: dh_interval_from = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: dh_interval_to = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: dh_interval_lith = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: last_output_dir = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: interp_custom_fields = 1.0
2026-01-08 05:35:20 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:176 | Thread-140301011020736 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: show_topo = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: show_geol = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: show_struct = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: show_drillholes = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: show_interpretations = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: auto_lod = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: adaptive_sampling = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: max_points = 1.0
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-140301011020736 | Settings loaded successfully from Project/Global config
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:447 | Thread-140301011020736 | Cache cleared by user
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-140301011020736 | GeologyGenerationTask started (Background Thread)
2026-01-08 05:35:20 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-140301011020736 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-140301011020736 | GeologyGenerationTask started (Background Thread)
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-140301011020736 | GeologyGenerationTask finished with 1 segments
2026-01-08 05:35:20 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-140301011020736 | Test Title: Test Message
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-140301011020736 | Test Title: Test Message
2026-01-08 05:35:20 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-140301011020736 | Test Title: Test Message
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-140301011020736 | CRITICAL_OP: finalize_polygon | points=2
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-140301011020736 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-08 05:35:20 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-140301011020736 | finalize_polygon() aborted - less than 3 points
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-140301011020736 | CRITICAL_OP: finalize_polygon | points=3
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-140301011020736 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-140301011020736 | finalize_polygon() - emitting polygonFinished signal for b72bfec8-ba0b-4280-935c-1a63ddcfac6e
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-140301011020736 | Interpretation polygon finalized with 3 vertices, ID: b72bfec8-ba0b-4280-935c-1a63ddcfac6e
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-140301011020736 | finalize_polygon() completed
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-140301011020736 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-140301011020736 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-140301011020736 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-140301011020736 | ProfileInterpretationTool.reset() completed
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-140301011020736 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-140301011020736 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-140301011020736 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-140301011020736 | ProfileInterpretationTool.reset() completed
2026-01-08 05:35:20 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-140301011020736 | Failed to create locator for layer layer1: mock error
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-140301011020736 | ProfileInterpretationTool.activate() called
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-140301011020736 | ProfileInterpretationTool activated successfully
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-140301011020736 | ProfileInterpretationTool.deactivate() called
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-140301011020736 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-140301011020736 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-140301011020736 | ProfileInterpretationTool.reset() completed
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-140301011020736 | ProfileInterpretationTool deactivated successfully
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: buffer_dist = 100.5
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-140301011020736 | Setting saved to project: test_layer = id_123
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-140301011020736 | Setting saved to project: test_layer_name = RealName
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140301011020736 | Global setting fallback: test_layer = 1.0
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:363 | Thread-140301011020736 | Project setting hit: test_layer_name = RealName
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:420 | Thread-140301011020736 | Restoring layer: test_layer -> RealName
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-140301011020736 | Point 1 added: 0.00, 0.00
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-140301011020736 | Point 2 added: 100.00, 100.00
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-140301011020736 | Point 1 added: 50.00, 50.00
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-140301011020736 | reset() called, finalized=False
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-140301011020736 | finalize_measurement called with 1 points
2026-01-08 05:35:20 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-140301011020736 | Cannot finalize measurement with less than 2 points
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-140301011020736 | finalize_measurement called with 2 points
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-140301011020736 | Setting finalized = True
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-140301011020736 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-140301011020736 | Switching to pan tool to stop measurement
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-140301011020736 | Pan tool activated - measurement should be frozen
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-140301011020736 | Ignoring click - measurement is finalized
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-140301011020736 | finalize_measurement called with 2 points
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-140301011020736 | Setting finalized = True
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-140301011020736 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-140301011020736 | Switching to pan tool to stop measurement
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-140301011020736 | Pan tool activated - measurement should be frozen
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-140301011020736 | reset() called, finalized=False
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-140301011020736 | reset() called, finalized=False
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-140301011020736 | reset() called, finalized=True
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-140301011020736 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-140301011020736 | reset() called, finalized=False
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-140301011020736 | finalize_measurement called with 2 points
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-140301011020736 | Setting finalized = True
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-140301011020736 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-140301011020736 | Rubber band redrawn with final points only
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-140301011020736 | Switching to pan tool to stop measurement
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-140301011020736 | Pan tool activated - measurement should be frozen
2026-01-08 05:35:20 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-140301011020736 | Failed to create locator for layer layer1: mock error
2026-01-08 05:35:20 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-140301011020736 | Failed to create locator for layer l2: fail
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-140301011020736 | ProfileMeasureTool activated
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-140301011020736 | reset() called, finalized=False
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-140301011020736 | ProfileMeasureTool deactivated
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-140301011020736 | create_drillhole_trace_layer called with 1 holes
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-140301011020736 | Adding 1 drillhole trace features to layer
2026-01-08 05:35:20 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-140301011020736 | Failed to create memory layer: Fail
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-140301011020736 | create_drillhole_trace_layer called with 0 holes
2026-01-08 05:35:20 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-140301011020736 | No drillhole data provided for trace layer
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-140301011020736 | create_drillhole_trace_layer called with 1 holes
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-140301011020736 | Skipping hole H1: insufficient trace points (1)
2026-01-08 05:35:20 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-140301011020736 | Adding 0 drillhole trace features to layer
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-140301011020736 | create_drillhole_trace_layer called with 1 holes
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-140301011020736 | render() called
2026-01-08 05:35:20 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-140301011020736 | No valid layers to render
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-140301011020736 | render() called
2026-01-08 05:35:20 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-140301011020736 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-140301011020736 | render() called
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-140301011020736 | render() called
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-140301011020736 | render() called
2026-01-08 05:35:20 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-140301011020736 | No valid layers to render
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-140301011020736 | render() called
2026-01-08 05:35:20 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-140301011020736 | render() called
2026-01-08 19:40:21 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-138245821918144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:40:21 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-138245821918144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:40:21 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-138245821918144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:40:21 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-138245821918144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:40:21 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-138245821918144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:40:21 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-138245821918144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:40:21 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-138245821918144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:40:21 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-138245821918144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:40:21 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-138245821918144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:40:21 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-138245821918144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:40:21 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-138245821918144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:40:21 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-138245821918144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:40:21 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-138245821918144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:40:21 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-138245821918144 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 19:40:21 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-138245821918144 | Generated QML style: /tmp/test.qml
2026-01-08 19:40:21 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-138245821918144 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-08 19:40:21 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-138245821918144 | Generated QML style: dummy.qml
2026-01-08 19:40:21 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-138245821918144 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 19:40:21 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-138245821918144 | Generated QML style: dummy.qml
2026-01-08 19:40:46 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-132968100985792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:40:46 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-132968100985792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:40:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-132968100985792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:40:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-132968100985792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:40:46 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-132968100985792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:40:46 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-132968100985792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:40:46 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-132968100985792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:40:46 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-132968100985792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:40:46 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-132968100985792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:40:46 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-132968100985792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:40:46 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-132968100985792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:40:46 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-132968100985792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:40:46 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-132968100985792 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:40:46 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-132968100985792 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 19:40:46 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-132968100985792 | Generated QML style: /tmp/test.qml
2026-01-08 19:40:46 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-132968100985792 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-08 19:40:46 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-132968100985792 | Generated QML style: dummy.qml
2026-01-08 19:40:46 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-132968100985792 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 19:40:46 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-132968100985792 | Generated QML style: dummy.qml
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-132967702637504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-132967702637504 | Config set: SecInterp/scale = 50000.0
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-132967702637504 | Config set: SecInterp/vert_exag = 1.0
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-132967702637504 | Config set: SecInterp/buffer_dist = 100.0
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-132967702637504 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-132967702637504 | Config set: SecInterp/last_output_dir = 
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-132967702637504 | Config set: SecInterp/dpi = 300
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-132967702637504 | Config set: SecInterp/preview_width = 800
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-132967702637504 | Config set: SecInterp/preview_height = 600
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-132967702637504 | Config set: SecInterp/sampling_interval = 10.0
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-132967702637504 | Config set: SecInterp/export_quality = 95
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-132967702637504 | Config set: SecInterp/auto_lod = True
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-132967702637504 | Config set: SecInterp/max_preview_points = 10000
2026-01-08 19:49:32 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-132967702637504 | Configuration reset to defaults
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-132967702637504 | Config set: SecInterp/scale = 200.0
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132967702637504 | CacheService initialized (Default TTL: 3600s)
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132967702637504 | CacheService initialized (Default TTL: 3600s)
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132967702637504 | CacheService initialized (Default TTL: 3600s)
2026-01-08 19:49:32 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-132967702637504 | Projecting collars from Test Layer with buffer 50.0m
2026-01-08 19:49:32 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-132967702637504 | No collars found within buffer area.
2026-01-08 19:49:32 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-132967702637504 | Projecting collars from Test Layer with buffer 50.0m
2026-01-08 19:49:32 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-132967702637504 | DrillholeService.project_collars END: Found 1 collars.
2026-01-08 19:49:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-132967702637504 | ✓ Saving profile axes...
2026-01-08 19:49:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-132967702637504 | ✓ Saving topographic profile...
2026-01-08 19:49:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-132967702637504 | ✓ Saving interpretation data...
2026-01-08 19:49:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-132967702637504 | 3D Export features are restricted for this user.
2026-01-08 19:49:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-132967702637504 | ✓ Saving profile axes...
2026-01-08 19:49:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-132967702637504 | ✓ Saving topographic profile...
2026-01-08 19:49:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-132967702637504 | ✓ Saving interpretation data...
2026-01-08 19:49:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-132967702637504 | ✓ Saving 3D interpretation data...
2026-01-08 19:49:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-132967702637504 | ✓ Saving profile axes...
2026-01-08 19:49:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-132967702637504 | ✓ Saving topographic profile...
2026-01-08 19:49:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-132967702637504 | ✓ Saving geological profile...
2026-01-08 19:49:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-132967702637504 | ✓ Saving structural profile...
2026-01-08 19:49:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-132967702637504 | ✓ Saving drillhole data...
2026-01-08 19:49:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-132967702637504 | ✓ Saving interpretation data...
2026-01-08 19:49:32 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-132967702637504 | Access denied for restricted feature: 3D Export
2026-01-08 19:49:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-132967702637504 | 3D Export features are restricted for this user.
2026-01-08 19:49:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-132967702637504 | ✓ Saving profile axes...
2026-01-08 19:49:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-132967702637504 | ✓ Saving topographic profile...
2026-01-08 19:49:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-132967702637504 | No interpretations provided for export.
2026-01-08 19:49:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-132967702637504 | ✓ Saving profile axes...
2026-01-08 19:49:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-132967702637504 | ✓ Saving drillhole data...
2026-01-08 19:49:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-132967702637504 | ✓ Saving geological profile...
2026-01-08 19:49:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-132967702637504 | ✓ Saving interpretation data...
2026-01-08 19:49:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-132967702637504 | ✓ Saving 3D interpretation data...
2026-01-08 19:49:32 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-132967702637504 | Invalid section line layer, skipping 3D export.
2026-01-08 19:49:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-132967702637504 | ✓ Saving interpretation data...
2026-01-08 19:49:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-132967702637504 | ✓ Saving structural profile...
2026-01-08 19:49:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-132967702637504 | ✓ Saving topographic profile...
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:296 | Thread-132967702637504 | Generating master profile with interval=10.00
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:296 | Thread-132967702637504 | Generating master profile with interval=50.00
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-132967702637504 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-132967702637504 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-132967702637504 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-132967702637504 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-132967702637504 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-08 19:49:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-132967702637504 | Running geometry operation: test
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-132967702637504 | Generated 1 drillhole traces
2026-01-08 19:49:33 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-132967702637504 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-08 19:49:33 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-132967702637504 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-132967702637504 | Generated 1 drillhole traces
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-132967702637504 | Drillhole preview skipped: No Collar ID field selected.
2026-01-08 19:49:33 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-132967702637504 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 19:49:33 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-132967702637504 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 19:49:33 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-132967702637504 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 19:49:33 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-132967702637504 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 19:49:33 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-132967702637504 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-132967702637504 | Analyzing structures in Structure Layer with buffer 10m
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-132967702637504 | Processed 1 structural measurements from Structure Layer
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-132967702637504 | Successfully exported to /tmp/test_dynamic.shp
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-132967702637504 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-132967702637504 | Generated QML style: /tmp/test.qml
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-132967702637504 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-132967702637504 | Generated QML style: dummy.qml
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-132967702637504 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-132967702637504 | Generated QML style: dummy.qml
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-132967702637504 | Loaded 0 interpretations from project
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: section_layer = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: section_layer_name = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-132967702637504 | Failed to restore layer for section_layer
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: buffer_dist = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: dem_layer = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: dem_layer_name = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-132967702637504 | Failed to restore layer for dem_layer
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: dem_band = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: scale = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: vert_exag = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: geol_layer = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: geol_layer_name = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-132967702637504 | Failed to restore layer for geol_layer
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: geol_field = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: struct_layer = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: struct_layer_name = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-132967702637504 | Failed to restore layer for struct_layer
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: struct_dip_field = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: struct_strike_field = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: dip_scale_factor = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: dh_collar_layer = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-132967702637504 | Failed to restore layer for dh_collar_layer
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: dh_collar_id = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: dh_use_geom = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: dh_collar_x = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: dh_collar_y = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: dh_collar_z = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: dh_collar_depth = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: dh_survey_layer = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-132967702637504 | Failed to restore layer for dh_survey_layer
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: dh_survey_id = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: dh_survey_depth = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: dh_survey_azim = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: dh_survey_incl = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: dh_interval_layer = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-132967702637504 | Failed to restore layer for dh_interval_layer
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: dh_interval_id = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: dh_interval_from = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: dh_interval_to = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: dh_interval_lith = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: last_output_dir = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: interp_custom_fields = 1.0
2026-01-08 19:49:33 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:176 | Thread-132967702637504 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: show_topo = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: show_geol = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: show_struct = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: show_drillholes = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: show_interpretations = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: auto_lod = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: adaptive_sampling = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: max_points = 1.0
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-132967702637504 | Settings loaded successfully from Project/Global config
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:447 | Thread-132967702637504 | Cache cleared by user
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-132967702637504 | GeologyGenerationTask started (Background Thread)
2026-01-08 19:49:33 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-132967702637504 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-132967702637504 | GeologyGenerationTask started (Background Thread)
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-132967702637504 | GeologyGenerationTask finished with 1 segments
2026-01-08 19:49:33 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-132967702637504 | Test Title: Test Message
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-132967702637504 | Test Title: Test Message
2026-01-08 19:49:33 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-132967702637504 | Test Title: Test Message
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-132967702637504 | CRITICAL_OP: finalize_polygon | points=2
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-132967702637504 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-08 19:49:33 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-132967702637504 | finalize_polygon() aborted - less than 3 points
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-132967702637504 | CRITICAL_OP: finalize_polygon | points=3
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-132967702637504 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-132967702637504 | finalize_polygon() - emitting polygonFinished signal for 50ed8de3-8de8-4921-8233-e61308408f70
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-132967702637504 | Interpretation polygon finalized with 3 vertices, ID: 50ed8de3-8de8-4921-8233-e61308408f70
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-132967702637504 | finalize_polygon() completed
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-132967702637504 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-132967702637504 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-132967702637504 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-132967702637504 | ProfileInterpretationTool.reset() completed
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-132967702637504 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-132967702637504 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-132967702637504 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-132967702637504 | ProfileInterpretationTool.reset() completed
2026-01-08 19:49:33 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-132967702637504 | Failed to create locator for layer layer1: mock error
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-132967702637504 | ProfileInterpretationTool.activate() called
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-132967702637504 | ProfileInterpretationTool activated successfully
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-132967702637504 | ProfileInterpretationTool.deactivate() called
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-132967702637504 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-132967702637504 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-132967702637504 | ProfileInterpretationTool.reset() completed
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-132967702637504 | ProfileInterpretationTool deactivated successfully
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: buffer_dist = 100.5
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-132967702637504 | Setting saved to project: test_layer = id_123
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-132967702637504 | Setting saved to project: test_layer_name = RealName
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-132967702637504 | Global setting fallback: test_layer = 1.0
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:363 | Thread-132967702637504 | Project setting hit: test_layer_name = RealName
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:420 | Thread-132967702637504 | Restoring layer: test_layer -> RealName
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-132967702637504 | Point 1 added: 0.00, 0.00
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-132967702637504 | Point 2 added: 100.00, 100.00
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-132967702637504 | Point 1 added: 50.00, 50.00
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-132967702637504 | reset() called, finalized=False
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-132967702637504 | finalize_measurement called with 1 points
2026-01-08 19:49:33 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-132967702637504 | Cannot finalize measurement with less than 2 points
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-132967702637504 | finalize_measurement called with 2 points
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-132967702637504 | Setting finalized = True
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-132967702637504 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-132967702637504 | Switching to pan tool to stop measurement
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-132967702637504 | Pan tool activated - measurement should be frozen
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-132967702637504 | Ignoring click - measurement is finalized
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-132967702637504 | finalize_measurement called with 2 points
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-132967702637504 | Setting finalized = True
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-132967702637504 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-132967702637504 | Switching to pan tool to stop measurement
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-132967702637504 | Pan tool activated - measurement should be frozen
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-132967702637504 | reset() called, finalized=False
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-132967702637504 | reset() called, finalized=False
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-132967702637504 | reset() called, finalized=True
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-132967702637504 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-132967702637504 | reset() called, finalized=False
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-132967702637504 | finalize_measurement called with 2 points
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-132967702637504 | Setting finalized = True
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-132967702637504 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-132967702637504 | Rubber band redrawn with final points only
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-132967702637504 | Switching to pan tool to stop measurement
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-132967702637504 | Pan tool activated - measurement should be frozen
2026-01-08 19:49:33 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-132967702637504 | Failed to create locator for layer layer1: mock error
2026-01-08 19:49:33 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-132967702637504 | Failed to create locator for layer l2: fail
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-132967702637504 | ProfileMeasureTool activated
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-132967702637504 | reset() called, finalized=False
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-132967702637504 | ProfileMeasureTool deactivated
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-132967702637504 | create_drillhole_trace_layer called with 1 holes
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-132967702637504 | Adding 1 drillhole trace features to layer
2026-01-08 19:49:33 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-132967702637504 | Failed to create memory layer: Fail
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-132967702637504 | create_drillhole_trace_layer called with 0 holes
2026-01-08 19:49:33 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-132967702637504 | No drillhole data provided for trace layer
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-132967702637504 | create_drillhole_trace_layer called with 1 holes
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-132967702637504 | Skipping hole H1: insufficient trace points (1)
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-132967702637504 | Adding 0 drillhole trace features to layer
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-132967702637504 | create_drillhole_trace_layer called with 1 holes
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132967702637504 | render() called
2026-01-08 19:49:33 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-132967702637504 | No valid layers to render
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132967702637504 | render() called
2026-01-08 19:49:33 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-132967702637504 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132967702637504 | render() called
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132967702637504 | render() called
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132967702637504 | render() called
2026-01-08 19:49:33 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-132967702637504 | No valid layers to render
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132967702637504 | render() called
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132967702637504 | render() called
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-132967702637504 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-132967702637504 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-132967702637504 | Point 1 added: 0.00, 0.00
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-132967702637504 | Point 2 added: 10.00, 10.00
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-132967702637504 | finalize_measurement called with 2 points
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-132967702637504 | Setting finalized = True
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-132967702637504 | Measurement finalized: 2 points, 14.14m total distance
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-132967702637504 | Rubber band redrawn with final points only
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-132967702637504 | Switching to pan tool to stop measurement
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-132967702637504 | Pan tool activated - measurement should be frozen
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-132967702637504 | reset() called, finalized=True
2026-01-08 19:49:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-132967702637504 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-132967702637504 | Point 1 added: 0.00, 0.00
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-132967702637504 | Point 2 added: 100.00, 100.00
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132967702637504 | CacheService initialized (Default TTL: 3600s)
2026-01-08 19:49:33 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-132967702637504 | ProfileController initialized
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-140361805478848 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-140361805478848 | Config set: SecInterp/scale = 50000.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-140361805478848 | Config set: SecInterp/vert_exag = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-140361805478848 | Config set: SecInterp/buffer_dist = 100.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-140361805478848 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-140361805478848 | Config set: SecInterp/last_output_dir = 
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-140361805478848 | Config set: SecInterp/dpi = 300
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-140361805478848 | Config set: SecInterp/preview_width = 800
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-140361805478848 | Config set: SecInterp/preview_height = 600
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-140361805478848 | Config set: SecInterp/sampling_interval = 10.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-140361805478848 | Config set: SecInterp/export_quality = 95
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-140361805478848 | Config set: SecInterp/auto_lod = True
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-140361805478848 | Config set: SecInterp/max_preview_points = 10000
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-140361805478848 | Configuration reset to defaults
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-140361805478848 | Config set: SecInterp/scale = 200.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-140361805478848 | CacheService initialized (Default TTL: 3600s)
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-140361805478848 | CacheService initialized (Default TTL: 3600s)
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-140361805478848 | CacheService initialized (Default TTL: 3600s)
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-140361805478848 | Projecting collars from Test Layer with buffer 50.0m
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-140361805478848 | No collars found within buffer area.
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-140361805478848 | Projecting collars from Test Layer with buffer 50.0m
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-140361805478848 | DrillholeService.project_collars END: Found 1 collars.
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-140361805478848 | ✓ Saving profile axes...
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-140361805478848 | ✓ Saving topographic profile...
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-140361805478848 | ✓ Saving interpretation data...
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-140361805478848 | 3D Export features are restricted for this user.
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-140361805478848 | ✓ Saving profile axes...
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-140361805478848 | ✓ Saving topographic profile...
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-140361805478848 | ✓ Saving interpretation data...
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-140361805478848 | ✓ Saving 3D interpretation data...
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-140361805478848 | ✓ Saving profile axes...
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-140361805478848 | ✓ Saving topographic profile...
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-140361805478848 | ✓ Saving geological profile...
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-140361805478848 | ✓ Saving structural profile...
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-140361805478848 | ✓ Saving drillhole data...
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-140361805478848 | ✓ Saving interpretation data...
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-140361805478848 | Access denied for restricted feature: 3D Export
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:212 | Thread-140361805478848 | 3D Export features are restricted for this user.
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-140361805478848 | ✓ Saving profile axes...
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-140361805478848 | ✓ Saving topographic profile...
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:179 | Thread-140361805478848 | No interpretations provided for export.
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:221 | Thread-140361805478848 | ✓ Saving profile axes...
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:164 | Thread-140361805478848 | ✓ Saving drillhole data...
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:110 | Thread-140361805478848 | ✓ Saving geological profile...
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-140361805478848 | ✓ Saving interpretation data...
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:195 | Thread-140361805478848 | ✓ Saving 3D interpretation data...
2026-01-08 19:50:28 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:210 | Thread-140361805478848 | Invalid section line layer, skipping 3D export.
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:183 | Thread-140361805478848 | ✓ Saving interpretation data...
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:130 | Thread-140361805478848 | ✓ Saving structural profile...
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:92 | Thread-140361805478848 | ✓ Saving topographic profile...
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:296 | Thread-140361805478848 | Generating master profile with interval=10.00
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:296 | Thread-140361805478848 | Generating master profile with interval=50.00
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-140361805478848 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-140361805478848 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-140361805478848 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-140361805478848 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-140361805478848 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-140361805478848 | Running geometry operation: test
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-140361805478848 | Generated 1 drillhole traces
2026-01-08 19:50:28 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-140361805478848 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-08 19:50:28 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-140361805478848 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-140361805478848 | Generated 1 drillhole traces
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-140361805478848 | Drillhole preview skipped: No Collar ID field selected.
2026-01-08 19:50:28 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-140361805478848 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 19:50:28 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-140361805478848 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 19:50:28 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-140361805478848 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 19:50:28 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-140361805478848 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 19:50:28 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-140361805478848 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-140361805478848 | Analyzing structures in Structure Layer with buffer 10m
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-140361805478848 | Processed 1 structural measurements from Structure Layer
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-140361805478848 | Successfully exported to /tmp/test_dynamic.shp
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-140361805478848 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-140361805478848 | Generated QML style: /tmp/test.qml
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-140361805478848 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-140361805478848 | Generated QML style: dummy.qml
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-140361805478848 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-140361805478848 | Generated QML style: dummy.qml
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-140361805478848 | Loaded 0 interpretations from project
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: section_layer = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: section_layer_name = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-140361805478848 | Failed to restore layer for section_layer
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: buffer_dist = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: dem_layer = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: dem_layer_name = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-140361805478848 | Failed to restore layer for dem_layer
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: dem_band = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: scale = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: vert_exag = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: geol_layer = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: geol_layer_name = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-140361805478848 | Failed to restore layer for geol_layer
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: geol_field = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: struct_layer = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: struct_layer_name = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-140361805478848 | Failed to restore layer for struct_layer
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: struct_dip_field = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: struct_strike_field = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: dip_scale_factor = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: dh_collar_layer = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-140361805478848 | Failed to restore layer for dh_collar_layer
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: dh_collar_id = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: dh_use_geom = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: dh_collar_x = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: dh_collar_y = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: dh_collar_z = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: dh_collar_depth = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: dh_survey_layer = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-140361805478848 | Failed to restore layer for dh_survey_layer
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: dh_survey_id = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: dh_survey_depth = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: dh_survey_azim = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: dh_survey_incl = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: dh_interval_layer = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-140361805478848 | Failed to restore layer for dh_interval_layer
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: dh_interval_id = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: dh_interval_from = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: dh_interval_to = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: dh_interval_lith = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: last_output_dir = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: interp_custom_fields = 1.0
2026-01-08 19:50:28 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:176 | Thread-140361805478848 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: show_topo = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: show_geol = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: show_struct = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: show_drillholes = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: show_interpretations = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: auto_lod = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: adaptive_sampling = 1.0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: max_points = 1.0
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-140361805478848 | Settings loaded successfully from Project/Global config
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:447 | Thread-140361805478848 | Cache cleared by user
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-140361805478848 | GeologyGenerationTask started (Background Thread)
2026-01-08 19:50:28 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-140361805478848 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-140361805478848 | GeologyGenerationTask started (Background Thread)
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-140361805478848 | GeologyGenerationTask finished with 1 segments
2026-01-08 19:50:28 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-140361805478848 | Test Title: Test Message
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-140361805478848 | Test Title: Test Message
2026-01-08 19:50:28 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-140361805478848 | Test Title: Test Message
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-140361805478848 | CRITICAL_OP: finalize_polygon | points=2
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-140361805478848 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-08 19:50:28 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-140361805478848 | finalize_polygon() aborted - less than 3 points
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-140361805478848 | CRITICAL_OP: finalize_polygon | points=3
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-140361805478848 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-140361805478848 | finalize_polygon() - emitting polygonFinished signal for d57a71e2-533e-4e61-9431-af067f8c68b4
2026-01-08 19:50:28 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-140361805478848 | Interpretation polygon finalized with 3 vertices, ID: d57a71e2-533e-4e61-9431-af067f8c68b4
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-140361805478848 | finalize_polygon() completed
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-140361805478848 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-140361805478848 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-140361805478848 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-140361805478848 | ProfileInterpretationTool.reset() completed
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-140361805478848 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-140361805478848 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-140361805478848 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-140361805478848 | ProfileInterpretationTool.reset() completed
2026-01-08 19:50:28 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-140361805478848 | Failed to create locator for layer layer1: mock error
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-140361805478848 | ProfileInterpretationTool.activate() called
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-140361805478848 | ProfileInterpretationTool activated successfully
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-140361805478848 | ProfileInterpretationTool.deactivate() called
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-140361805478848 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-140361805478848 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-140361805478848 | ProfileInterpretationTool.reset() completed
2026-01-08 19:50:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-140361805478848 | ProfileInterpretationTool deactivated successfully
2026-01-08 19:50:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: buffer_dist = 100.5
2026-01-08 19:50:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-140361805478848 | Setting saved to project: test_layer = id_123
2026-01-08 19:50:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-140361805478848 | Setting saved to project: test_layer_name = RealName
2026-01-08 19:50:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-140361805478848 | Global setting fallback: test_layer = 1.0
2026-01-08 19:50:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:363 | Thread-140361805478848 | Project setting hit: test_layer_name = RealName
2026-01-08 19:50:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:420 | Thread-140361805478848 | Restoring layer: test_layer -> RealName
2026-01-08 19:50:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-140361805478848 | Point 1 added: 0.00, 0.00
2026-01-08 19:50:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-140361805478848 | Point 2 added: 100.00, 100.00
2026-01-08 19:50:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-140361805478848 | Point 1 added: 50.00, 50.00
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-140361805478848 | reset() called, finalized=False
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-140361805478848 | finalize_measurement called with 1 points
2026-01-08 19:50:29 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-140361805478848 | Cannot finalize measurement with less than 2 points
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-140361805478848 | finalize_measurement called with 2 points
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-140361805478848 | Setting finalized = True
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-140361805478848 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-140361805478848 | Switching to pan tool to stop measurement
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-140361805478848 | Pan tool activated - measurement should be frozen
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-140361805478848 | Ignoring click - measurement is finalized
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-140361805478848 | finalize_measurement called with 2 points
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-140361805478848 | Setting finalized = True
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-140361805478848 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-140361805478848 | Switching to pan tool to stop measurement
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-140361805478848 | Pan tool activated - measurement should be frozen
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-140361805478848 | reset() called, finalized=False
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-140361805478848 | reset() called, finalized=False
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-140361805478848 | reset() called, finalized=True
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-140361805478848 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-140361805478848 | reset() called, finalized=False
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-140361805478848 | finalize_measurement called with 2 points
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-140361805478848 | Setting finalized = True
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-140361805478848 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-140361805478848 | Rubber band redrawn with final points only
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-140361805478848 | Switching to pan tool to stop measurement
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-140361805478848 | Pan tool activated - measurement should be frozen
2026-01-08 19:50:29 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-140361805478848 | Failed to create locator for layer layer1: mock error
2026-01-08 19:50:29 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-140361805478848 | Failed to create locator for layer l2: fail
2026-01-08 19:50:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-140361805478848 | ProfileMeasureTool activated
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-140361805478848 | reset() called, finalized=False
2026-01-08 19:50:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-140361805478848 | ProfileMeasureTool deactivated
2026-01-08 19:50:29 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-140361805478848 | create_drillhole_trace_layer called with 1 holes
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-140361805478848 | Adding 1 drillhole trace features to layer
2026-01-08 19:50:29 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-140361805478848 | Failed to create memory layer: Fail
2026-01-08 19:50:29 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-140361805478848 | create_drillhole_trace_layer called with 0 holes
2026-01-08 19:50:29 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-140361805478848 | No drillhole data provided for trace layer
2026-01-08 19:50:29 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-140361805478848 | create_drillhole_trace_layer called with 1 holes
2026-01-08 19:50:29 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-140361805478848 | Skipping hole H1: insufficient trace points (1)
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-140361805478848 | Adding 0 drillhole trace features to layer
2026-01-08 19:50:29 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-140361805478848 | create_drillhole_trace_layer called with 1 holes
2026-01-08 19:50:29 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-140361805478848 | render() called
2026-01-08 19:50:29 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-140361805478848 | No valid layers to render
2026-01-08 19:50:29 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-140361805478848 | render() called
2026-01-08 19:50:29 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-140361805478848 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-08 19:50:29 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-140361805478848 | render() called
2026-01-08 19:50:29 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-140361805478848 | render() called
2026-01-08 19:50:29 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-140361805478848 | render() called
2026-01-08 19:50:29 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-140361805478848 | No valid layers to render
2026-01-08 19:50:29 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-140361805478848 | render() called
2026-01-08 19:50:29 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-140361805478848 | render() called
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-140361805478848 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-140361805478848 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-08 19:50:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-140361805478848 | Point 1 added: 0.00, 0.00
2026-01-08 19:50:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-140361805478848 | Point 2 added: 10.00, 10.00
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-140361805478848 | finalize_measurement called with 2 points
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-140361805478848 | Setting finalized = True
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-140361805478848 | Measurement finalized: 2 points, 14.14m total distance
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-140361805478848 | Rubber band redrawn with final points only
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-140361805478848 | Switching to pan tool to stop measurement
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-140361805478848 | Pan tool activated - measurement should be frozen
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-140361805478848 | reset() called, finalized=True
2026-01-08 19:50:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-140361805478848 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-08 19:50:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-140361805478848 | Point 1 added: 0.00, 0.00
2026-01-08 19:50:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-140361805478848 | Point 2 added: 100.00, 100.00
2026-01-08 19:50:29 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-140361805478848 | CacheService initialized (Default TTL: 3600s)
2026-01-08 19:50:29 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-140361805478848 | ProfileController initialized
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-132857473067968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-132857473067968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-132857473067968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-132857473067968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-132857473067968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-132857473067968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-132857473067968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-132857473067968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-132857473067968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-132857473067968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-132857473067968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-132857473067968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-132857473067968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-132857473067968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-132857473067968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-132857473067968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-132857473067968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-132857473067968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-132857473067968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-132857473067968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-132857473067968 | Config set: SecInterp/scale = 50000.0
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-132857473067968 | Config set: SecInterp/vert_exag = 1.0
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-132857473067968 | Config set: SecInterp/buffer_dist = 100.0
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-132857473067968 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-132857473067968 | Config set: SecInterp/last_output_dir = 
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-132857473067968 | Config set: SecInterp/dpi = 300
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-132857473067968 | Config set: SecInterp/preview_width = 800
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-132857473067968 | Config set: SecInterp/preview_height = 600
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-132857473067968 | Config set: SecInterp/sampling_interval = 10.0
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-132857473067968 | Config set: SecInterp/export_quality = 95
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-132857473067968 | Config set: SecInterp/auto_lod = True
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-132857473067968 | Config set: SecInterp/max_preview_points = 10000
2026-01-08 19:58:25 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-132857473067968 | Configuration reset to defaults
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-132857473067968 | Config set: SecInterp/scale = 200.0
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132857473067968 | CacheService initialized (Default TTL: 3600s)
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132857473067968 | CacheService initialized (Default TTL: 3600s)
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132857473067968 | CacheService initialized (Default TTL: 3600s)
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-132857473067968 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-132857473067968 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-132857473067968 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-132857473067968 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-132857473067968 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-08 19:58:25 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-132857473067968 | Running geometry operation: test
2026-01-08 19:58:25 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-132857473067968 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 19:58:25 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-132857473067968 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 19:58:25 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-132857473067968 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 19:58:25 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-132857473067968 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 19:58:25 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-132857473067968 | Successfully exported to /tmp/test_dynamic.shp
2026-01-08 19:58:25 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-132857473067968 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 19:58:25 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-132857473067968 | Generated QML style: /tmp/test.qml
2026-01-08 19:58:25 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-132857473067968 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-08 19:58:25 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-132857473067968 | Generated QML style: dummy.qml
2026-01-08 19:58:25 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-132857473067968 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 19:58:25 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-132857473067968 | Generated QML style: dummy.qml
2026-01-08 19:58:25 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-132857473067968 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-08 19:58:25 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-132857473067968 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:127 | Thread-136106885733312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136106885733312 | Config set: SecInterp/scale = 50000.0
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136106885733312 | Config set: SecInterp/vert_exag = 1.0
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136106885733312 | Config set: SecInterp/buffer_dist = 100.0
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136106885733312 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136106885733312 | Config set: SecInterp/last_output_dir = 
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136106885733312 | Config set: SecInterp/dpi = 300
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136106885733312 | Config set: SecInterp/preview_width = 800
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136106885733312 | Config set: SecInterp/preview_height = 600
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136106885733312 | Config set: SecInterp/sampling_interval = 10.0
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136106885733312 | Config set: SecInterp/export_quality = 95
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136106885733312 | Config set: SecInterp/auto_lod = True
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136106885733312 | Config set: SecInterp/max_preview_points = 10000
2026-01-08 19:58:51 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-136106885733312 | Configuration reset to defaults
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136106885733312 | Config set: SecInterp/scale = 200.0
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-136106885733312 | CacheService initialized (Default TTL: 3600s)
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-136106885733312 | CacheService initialized (Default TTL: 3600s)
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-136106885733312 | CacheService initialized (Default TTL: 3600s)
2026-01-08 19:58:51 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-136106885733312 | Projecting collars from Test Layer with buffer 50.0m
2026-01-08 19:58:51 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-136106885733312 | No collars found within buffer area.
2026-01-08 19:58:51 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-136106885733312 | Projecting collars from Test Layer with buffer 50.0m
2026-01-08 19:58:51 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-136106885733312 | DrillholeService.project_collars END: Found 1 collars.
2026-01-08 19:58:51 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:242 | Thread-136106885733312 | ✓ Saving profile axes...
2026-01-08 19:58:51 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:94 | Thread-136106885733312 | ✓ Saving topographic profile...
2026-01-08 19:58:51 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:204 | Thread-136106885733312 | ✓ Saving interpretation data...
2026-01-08 19:58:51 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:233 | Thread-136106885733312 | 3D Export features are restricted for this user.
2026-01-08 19:58:51 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:242 | Thread-136106885733312 | ✓ Saving profile axes...
2026-01-08 19:58:51 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:94 | Thread-136106885733312 | ✓ Saving topographic profile...
2026-01-08 19:58:51 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:204 | Thread-136106885733312 | ✓ Saving interpretation data...
2026-01-08 19:58:51 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:216 | Thread-136106885733312 | ✓ Saving 3D interpretation data...
2026-01-08 19:58:51 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:242 | Thread-136106885733312 | ✓ Saving profile axes...
2026-01-08 19:58:51 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:94 | Thread-136106885733312 | ✓ Saving topographic profile...
2026-01-08 19:58:51 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:114 | Thread-136106885733312 | ✓ Saving geological profile...
2026-01-08 19:58:51 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:142 | Thread-136106885733312 | ✓ Saving structural profile...
2026-01-08 19:58:51 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:178 | Thread-136106885733312 | ✓ Saving drillhole data...
2026-01-08 19:58:51 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:204 | Thread-136106885733312 | ✓ Saving interpretation data...
2026-01-08 19:58:51 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-136106885733312 | Access denied for restricted feature: 3D Export
2026-01-08 19:58:51 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:233 | Thread-136106885733312 | 3D Export features are restricted for this user.
2026-01-08 19:58:51 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:242 | Thread-136106885733312 | ✓ Saving profile axes...
2026-01-08 19:58:51 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:94 | Thread-136106885733312 | ✓ Saving topographic profile...
2026-01-08 19:58:51 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:200 | Thread-136106885733312 | No interpretations provided for export.
2026-01-08 19:58:51 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:242 | Thread-136106885733312 | ✓ Saving profile axes...
2026-01-08 19:58:51 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:178 | Thread-136106885733312 | ✓ Saving drillhole data...
2026-01-08 19:58:51 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:114 | Thread-136106885733312 | ✓ Saving geological profile...
2026-01-08 19:58:51 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:204 | Thread-136106885733312 | ✓ Saving interpretation data...
2026-01-08 19:58:51 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:216 | Thread-136106885733312 | ✓ Saving 3D interpretation data...
2026-01-08 19:58:51 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:231 | Thread-136106885733312 | Invalid section line layer, skipping 3D export.
2026-01-08 19:58:51 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:204 | Thread-136106885733312 | ✓ Saving interpretation data...
2026-01-08 19:58:51 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:142 | Thread-136106885733312 | ✓ Saving structural profile...
2026-01-08 19:58:51 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:94 | Thread-136106885733312 | ✓ Saving topographic profile...
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-136106885733312 | Generating master profile with interval=10.00
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-136106885733312 | Generating master profile with interval=50.00
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-136106885733312 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-136106885733312 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-136106885733312 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-136106885733312 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-136106885733312 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-08 19:58:51 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-136106885733312 | Running geometry operation: test
2026-01-08 19:58:51 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-136106885733312 | Generated 1 drillhole traces
2026-01-08 19:58:51 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-136106885733312 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-08 19:58:52 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-136106885733312 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-136106885733312 | Generated 1 drillhole traces
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-136106885733312 | Drillhole preview skipped: No Collar ID field selected.
2026-01-08 19:58:52 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-136106885733312 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 19:58:52 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-136106885733312 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 19:58:52 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-136106885733312 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 19:58:52 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-136106885733312 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 19:58:52 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-136106885733312 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-136106885733312 | Analyzing structures in Structure Layer with buffer 10m
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-136106885733312 | Processed 1 structural measurements from Structure Layer
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-136106885733312 | Successfully exported to /tmp/test_dynamic.shp
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-136106885733312 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-136106885733312 | Generated QML style: /tmp/test.qml
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-136106885733312 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-136106885733312 | Generated QML style: dummy.qml
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-136106885733312 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-136106885733312 | Generated QML style: dummy.qml
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:527 | Thread-136106885733312 | Loaded 0 interpretations from project
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: section_layer = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: section_layer_name = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-136106885733312 | Failed to restore layer for section_layer
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: buffer_dist = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: dem_layer = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: dem_layer_name = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-136106885733312 | Failed to restore layer for dem_layer
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: dem_band = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: scale = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: vert_exag = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: geol_layer = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: geol_layer_name = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-136106885733312 | Failed to restore layer for geol_layer
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: geol_field = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: struct_layer = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: struct_layer_name = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-136106885733312 | Failed to restore layer for struct_layer
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: struct_dip_field = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: struct_strike_field = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: dip_scale_factor = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: dh_collar_layer = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-136106885733312 | Failed to restore layer for dh_collar_layer
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: dh_collar_id = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: dh_use_geom = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: dh_collar_x = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: dh_collar_y = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: dh_collar_z = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: dh_collar_depth = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: dh_survey_layer = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-136106885733312 | Failed to restore layer for dh_survey_layer
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: dh_survey_id = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: dh_survey_depth = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: dh_survey_azim = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: dh_survey_incl = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: dh_interval_layer = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:426 | Thread-136106885733312 | Failed to restore layer for dh_interval_layer
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: dh_interval_id = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: dh_interval_from = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: dh_interval_to = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: dh_interval_lith = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: last_output_dir = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: interp_custom_fields = 1.0
2026-01-08 19:58:52 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:176 | Thread-136106885733312 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: show_topo = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: show_geol = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: show_struct = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: show_drillholes = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: show_interpretations = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: auto_lod = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: adaptive_sampling = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: max_points = 1.0
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:194 | Thread-136106885733312 | Settings loaded successfully from Project/Global config
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:447 | Thread-136106885733312 | Cache cleared by user
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-136106885733312 | GeologyGenerationTask started (Background Thread)
2026-01-08 19:58:52 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-136106885733312 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-136106885733312 | GeologyGenerationTask started (Background Thread)
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-136106885733312 | GeologyGenerationTask finished with 1 segments
2026-01-08 19:58:52 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-136106885733312 | Test Title: Test Message
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-136106885733312 | Test Title: Test Message
2026-01-08 19:58:52 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-136106885733312 | Test Title: Test Message
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-136106885733312 | CRITICAL_OP: finalize_polygon | points=2
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-136106885733312 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-08 19:58:52 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:281 | Thread-136106885733312 | finalize_polygon() aborted - less than 3 points
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-136106885733312 | CRITICAL_OP: finalize_polygon | points=3
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:277 | Thread-136106885733312 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-136106885733312 | finalize_polygon() - emitting polygonFinished signal for 5122b193-6aad-4a0d-9baf-dd258e830a71
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:310 | Thread-136106885733312 | Interpretation polygon finalized with 3 vertices, ID: 5122b193-6aad-4a0d-9baf-dd258e830a71
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:313 | Thread-136106885733312 | finalize_polygon() completed
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-136106885733312 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-136106885733312 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-136106885733312 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-136106885733312 | ProfileInterpretationTool.reset() completed
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:160 | Thread-136106885733312 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-136106885733312 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-136106885733312 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-136106885733312 | ProfileInterpretationTool.reset() completed
2026-01-08 19:58:52 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-136106885733312 | Failed to create locator for layer layer1: mock error
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:137 | Thread-136106885733312 | ProfileInterpretationTool.activate() called
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:140 | Thread-136106885733312 | ProfileInterpretationTool activated successfully
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:145 | Thread-136106885733312 | ProfileInterpretationTool.deactivate() called
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:157 | Thread-136106885733312 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:177 | Thread-136106885733312 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:179 | Thread-136106885733312 | ProfileInterpretationTool.reset() completed
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:148 | Thread-136106885733312 | ProfileInterpretationTool deactivated successfully
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: buffer_dist = 100.5
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-136106885733312 | Setting saved to project: test_layer = id_123
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:383 | Thread-136106885733312 | Setting saved to project: test_layer_name = RealName
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:371 | Thread-136106885733312 | Global setting fallback: test_layer = 1.0
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:363 | Thread-136106885733312 | Project setting hit: test_layer_name = RealName
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:420 | Thread-136106885733312 | Restoring layer: test_layer -> RealName
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-136106885733312 | Point 1 added: 0.00, 0.00
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-136106885733312 | Point 2 added: 100.00, 100.00
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-136106885733312 | Point 1 added: 50.00, 50.00
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-136106885733312 | reset() called, finalized=False
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-136106885733312 | finalize_measurement called with 1 points
2026-01-08 19:58:52 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:254 | Thread-136106885733312 | Cannot finalize measurement with less than 2 points
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-136106885733312 | finalize_measurement called with 2 points
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-136106885733312 | Setting finalized = True
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-136106885733312 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-136106885733312 | Switching to pan tool to stop measurement
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-136106885733312 | Pan tool activated - measurement should be frozen
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:192 | Thread-136106885733312 | Ignoring click - measurement is finalized
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-136106885733312 | finalize_measurement called with 2 points
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-136106885733312 | Setting finalized = True
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-136106885733312 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-136106885733312 | Switching to pan tool to stop measurement
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-136106885733312 | Pan tool activated - measurement should be frozen
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-136106885733312 | reset() called, finalized=False
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-136106885733312 | reset() called, finalized=False
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-136106885733312 | reset() called, finalized=True
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-136106885733312 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-136106885733312 | reset() called, finalized=False
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-136106885733312 | finalize_measurement called with 2 points
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-136106885733312 | Setting finalized = True
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-136106885733312 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-136106885733312 | Rubber band redrawn with final points only
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-136106885733312 | Switching to pan tool to stop measurement
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-136106885733312 | Pan tool activated - measurement should be frozen
2026-01-08 19:58:52 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-136106885733312 | Failed to create locator for layer layer1: mock error
2026-01-08 19:58:52 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-136106885733312 | Failed to create locator for layer l2: fail
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:136 | Thread-136106885733312 | ProfileMeasureTool activated
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-136106885733312 | reset() called, finalized=False
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:141 | Thread-136106885733312 | ProfileMeasureTool deactivated
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-136106885733312 | create_drillhole_trace_layer called with 1 holes
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-136106885733312 | Adding 1 drillhole trace features to layer
2026-01-08 19:58:52 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-136106885733312 | Failed to create memory layer: Fail
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-136106885733312 | create_drillhole_trace_layer called with 0 holes
2026-01-08 19:58:52 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-136106885733312 | No drillhole data provided for trace layer
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-136106885733312 | create_drillhole_trace_layer called with 1 holes
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-136106885733312 | Skipping hole H1: insufficient trace points (1)
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-136106885733312 | Adding 0 drillhole trace features to layer
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-136106885733312 | create_drillhole_trace_layer called with 1 holes
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136106885733312 | render() called
2026-01-08 19:58:52 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-136106885733312 | No valid layers to render
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136106885733312 | render() called
2026-01-08 19:58:52 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-136106885733312 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136106885733312 | render() called
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136106885733312 | render() called
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136106885733312 | render() called
2026-01-08 19:58:52 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-136106885733312 | No valid layers to render
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136106885733312 | render() called
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136106885733312 | render() called
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-136106885733312 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-136106885733312 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-136106885733312 | Point 1 added: 0.00, 0.00
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-136106885733312 | Point 2 added: 10.00, 10.00
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:251 | Thread-136106885733312 | finalize_measurement called with 2 points
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:261 | Thread-136106885733312 | Setting finalized = True
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-136106885733312 | Measurement finalized: 2 points, 14.14m total distance
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:277 | Thread-136106885733312 | Rubber band redrawn with final points only
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-136106885733312 | Switching to pan tool to stop measurement
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:284 | Thread-136106885733312 | Pan tool activated - measurement should be frozen
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:149 | Thread-136106885733312 | reset() called, finalized=True
2026-01-08 19:58:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:153 | Thread-136106885733312 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-136106885733312 | Point 1 added: 0.00, 0.00
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:238 | Thread-136106885733312 | Point 2 added: 100.00, 100.00
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-136106885733312 | CacheService initialized (Default TTL: 3600s)
2026-01-08 19:58:52 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-136106885733312 | ProfileController initialized
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:136 | Thread-130912672521152 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:136 | Thread-130912672521152 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:136 | Thread-130912672521152 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:136 | Thread-130912672521152 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:136 | Thread-130912672521152 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:136 | Thread-130912672521152 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:136 | Thread-130912672521152 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:136 | Thread-130912672521152 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:136 | Thread-130912672521152 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:136 | Thread-130912672521152 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:136 | Thread-130912672521152 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:136 | Thread-130912672521152 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:136 | Thread-130912672521152 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:136 | Thread-130912672521152 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:136 | Thread-130912672521152 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:136 | Thread-130912672521152 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:136 | Thread-130912672521152 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:136 | Thread-130912672521152 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:136 | Thread-130912672521152 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:136 | Thread-130912672521152 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:136 | Thread-130912672521152 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:136 | Thread-130912672521152 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:136 | Thread-130912672521152 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:136 | Thread-130912672521152 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:136 | Thread-130912672521152 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:136 | Thread-130912672521152 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:136 | Thread-130912672521152 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:136 | Thread-130912672521152 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:136 | Thread-130912672521152 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:136 | Thread-130912672521152 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:136 | Thread-130912672521152 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:136 | Thread-130912672521152 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:136 | Thread-130912672521152 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130912672521152 | Config set: SecInterp/scale = 50000.0
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130912672521152 | Config set: SecInterp/vert_exag = 1.0
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130912672521152 | Config set: SecInterp/buffer_dist = 100.0
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130912672521152 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130912672521152 | Config set: SecInterp/last_output_dir = 
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130912672521152 | Config set: SecInterp/dpi = 300
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130912672521152 | Config set: SecInterp/preview_width = 800
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130912672521152 | Config set: SecInterp/preview_height = 600
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130912672521152 | Config set: SecInterp/sampling_interval = 10.0
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130912672521152 | Config set: SecInterp/export_quality = 95
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130912672521152 | Config set: SecInterp/auto_lod = True
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130912672521152 | Config set: SecInterp/max_preview_points = 10000
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-130912672521152 | Configuration reset to defaults
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130912672521152 | Config set: SecInterp/scale = 200.0
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130912672521152 | CacheService initialized (Default TTL: 3600s)
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130912672521152 | CacheService initialized (Default TTL: 3600s)
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130912672521152 | CacheService initialized (Default TTL: 3600s)
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-130912672521152 | Projecting collars from Test Layer with buffer 50.0m
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-130912672521152 | No collars found within buffer area.
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-130912672521152 | Projecting collars from Test Layer with buffer 50.0m
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-130912672521152 | DrillholeService.project_collars END: Found 1 collars.
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:242 | Thread-130912672521152 | ✓ Saving profile axes...
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:94 | Thread-130912672521152 | ✓ Saving topographic profile...
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:204 | Thread-130912672521152 | ✓ Saving interpretation data...
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:233 | Thread-130912672521152 | 3D Export features are restricted for this user.
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:242 | Thread-130912672521152 | ✓ Saving profile axes...
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:94 | Thread-130912672521152 | ✓ Saving topographic profile...
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:204 | Thread-130912672521152 | ✓ Saving interpretation data...
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:216 | Thread-130912672521152 | ✓ Saving 3D interpretation data...
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:242 | Thread-130912672521152 | ✓ Saving profile axes...
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:94 | Thread-130912672521152 | ✓ Saving topographic profile...
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:114 | Thread-130912672521152 | ✓ Saving geological profile...
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:142 | Thread-130912672521152 | ✓ Saving structural profile...
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:178 | Thread-130912672521152 | ✓ Saving drillhole data...
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:204 | Thread-130912672521152 | ✓ Saving interpretation data...
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-130912672521152 | Access denied for restricted feature: 3D Export
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:233 | Thread-130912672521152 | 3D Export features are restricted for this user.
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:242 | Thread-130912672521152 | ✓ Saving profile axes...
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:94 | Thread-130912672521152 | ✓ Saving topographic profile...
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:200 | Thread-130912672521152 | No interpretations provided for export.
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:242 | Thread-130912672521152 | ✓ Saving profile axes...
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:178 | Thread-130912672521152 | ✓ Saving drillhole data...
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:114 | Thread-130912672521152 | ✓ Saving geological profile...
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:204 | Thread-130912672521152 | ✓ Saving interpretation data...
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:216 | Thread-130912672521152 | ✓ Saving 3D interpretation data...
2026-01-08 20:32:36 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:231 | Thread-130912672521152 | Invalid section line layer, skipping 3D export.
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:204 | Thread-130912672521152 | ✓ Saving interpretation data...
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:142 | Thread-130912672521152 | ✓ Saving structural profile...
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:94 | Thread-130912672521152 | ✓ Saving topographic profile...
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-130912672521152 | Generating master profile with interval=10.00
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-130912672521152 | Generating master profile with interval=50.00
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-130912672521152 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-130912672521152 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-130912672521152 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-130912672521152 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-130912672521152 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-08 20:32:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-130912672521152 | Running geometry operation: test
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-130912672521152 | Generated 1 drillhole traces
2026-01-08 20:32:36 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-130912672521152 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-08 20:32:36 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-130912672521152 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-130912672521152 | Generated 1 drillhole traces
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-130912672521152 | Drillhole preview skipped: No Collar ID field selected.
2026-01-08 20:32:36 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-130912672521152 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 20:32:36 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-130912672521152 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 20:32:36 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-130912672521152 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 20:32:36 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-130912672521152 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 20:32:36 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-130912672521152 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-130912672521152 | Analyzing structures in Structure Layer with buffer 10m
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-130912672521152 | Processed 1 structural measurements from Structure Layer
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-130912672521152 | Successfully exported to /tmp/test_dynamic.shp
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-130912672521152 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-130912672521152 | Generated QML style: /tmp/test.qml
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-130912672521152 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-130912672521152 | Generated QML style: dummy.qml
2026-01-08 20:32:36 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-130912672521152 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 20:32:37 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-130912672521152 | Generated QML style: dummy.qml
2026-01-08 20:32:37 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-130912672521152 | GeologyGenerationTask started (Background Thread)
2026-01-08 20:32:37 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-130912672521152 | GeologyGenerationTask finished with 1 segments
2026-01-08 20:32:37 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:169 | Thread-130912672521152 | CRITICAL_OP: finalize_polygon | points=2
2026-01-08 20:32:37 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-130912672521152 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-08 20:32:37 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-130912672521152 | finalize_polygon() aborted - less than 3 points
2026-01-08 20:32:37 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:169 | Thread-130912672521152 | CRITICAL_OP: finalize_polygon | points=3
2026-01-08 20:32:37 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-130912672521152 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-08 20:32:37 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-130912672521152 | finalize_polygon() - emitting polygonFinished signal for 15226e79-b29f-4139-bb4f-7d9151b8dc2c
2026-01-08 20:32:37 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-130912672521152 | Interpretation polygon finalized with 3 vertices, ID: 15226e79-b29f-4139-bb4f-7d9151b8dc2c
2026-01-08 20:32:37 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-130912672521152 | finalize_polygon() completed
2026-01-08 20:32:37 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:169 | Thread-130912672521152 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-08 20:32:37 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-130912672521152 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-08 20:32:37 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-130912672521152 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 20:32:37 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-130912672521152 | ProfileInterpretationTool.reset() completed
2026-01-08 20:32:37 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:169 | Thread-130912672521152 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-08 20:32:37 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-130912672521152 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-08 20:32:37 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-130912672521152 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 20:32:37 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-130912672521152 | ProfileInterpretationTool.reset() completed
2026-01-08 20:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-130912672521152 | Global setting fallback: buffer_dist = 100.5
2026-01-08 20:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:387 | Thread-130912672521152 | Setting saved to project: test_layer = id_123
2026-01-08 20:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:387 | Thread-130912672521152 | Setting saved to project: test_layer_name = RealName
2026-01-08 20:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-130912672521152 | Global setting fallback: test_layer = 1.0
2026-01-08 20:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:367 | Thread-130912672521152 | Project setting hit: test_layer_name = RealName
2026-01-08 20:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:424 | Thread-130912672521152 | Restoring layer: test_layer -> RealName
2026-01-08 20:32:37 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-130912672521152 | Point 1 added: 0.00, 0.00
2026-01-08 20:32:37 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-130912672521152 | Point 2 added: 100.00, 100.00
2026-01-08 20:32:37 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-130912672521152 | Point 1 added: 50.00, 50.00
2026-01-08 20:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-130912672521152 | reset() called, finalized=False
2026-01-08 20:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-130912672521152 | finalize_measurement called with 1 points
2026-01-08 20:32:37 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-130912672521152 | Cannot finalize measurement with less than 2 points
2026-01-08 20:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-130912672521152 | finalize_measurement called with 2 points
2026-01-08 20:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-130912672521152 | Setting finalized = True
2026-01-08 20:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-130912672521152 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 20:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-130912672521152 | Switching to pan tool to stop measurement
2026-01-08 20:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-130912672521152 | Pan tool activated - measurement should be frozen
2026-01-08 20:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-130912672521152 | reset() called, finalized=False
2026-01-08 20:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-130912672521152 | reset() called, finalized=False
2026-01-08 20:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-130912672521152 | reset() called, finalized=True
2026-01-08 20:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-130912672521152 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-08 20:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-130912672521152 | reset() called, finalized=False
2026-01-08 20:32:37 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-130912672521152 | ProfileMeasureTool activated
2026-01-08 20:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-130912672521152 | reset() called, finalized=False
2026-01-08 20:32:37 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-130912672521152 | ProfileMeasureTool deactivated
2026-01-08 20:32:37 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-130912672521152 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-08 20:32:37 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-130912672521152 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-08 20:32:37 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-130912672521152 | Point 1 added: 0.00, 0.00
2026-01-08 20:32:37 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-130912672521152 | Point 2 added: 10.00, 10.00
2026-01-08 20:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-130912672521152 | finalize_measurement called with 2 points
2026-01-08 20:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-130912672521152 | Setting finalized = True
2026-01-08 20:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-130912672521152 | Measurement finalized: 2 points, 14.14m total distance
2026-01-08 20:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-130912672521152 | Rubber band redrawn with final points only
2026-01-08 20:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-130912672521152 | Switching to pan tool to stop measurement
2026-01-08 20:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-130912672521152 | Pan tool activated - measurement should be frozen
2026-01-08 20:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-130912672521152 | reset() called, finalized=True
2026-01-08 20:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-130912672521152 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-08 20:32:37 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-130912672521152 | Point 1 added: 0.00, 0.00
2026-01-08 20:32:37 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-130912672521152 | Point 2 added: 100.00, 100.00
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:136 | Thread-130402233129920 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130402233129920 | Config set: SecInterp/scale = 50000.0
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130402233129920 | Config set: SecInterp/vert_exag = 1.0
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130402233129920 | Config set: SecInterp/buffer_dist = 100.0
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130402233129920 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130402233129920 | Config set: SecInterp/last_output_dir = 
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130402233129920 | Config set: SecInterp/dpi = 300
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130402233129920 | Config set: SecInterp/preview_width = 800
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130402233129920 | Config set: SecInterp/preview_height = 600
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130402233129920 | Config set: SecInterp/sampling_interval = 10.0
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130402233129920 | Config set: SecInterp/export_quality = 95
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130402233129920 | Config set: SecInterp/auto_lod = True
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130402233129920 | Config set: SecInterp/max_preview_points = 10000
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-130402233129920 | Configuration reset to defaults
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130402233129920 | Config set: SecInterp/scale = 200.0
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130402233129920 | CacheService initialized (Default TTL: 3600s)
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130402233129920 | CacheService initialized (Default TTL: 3600s)
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130402233129920 | CacheService initialized (Default TTL: 3600s)
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-130402233129920 | Projecting collars from Test Layer with buffer 50.0m
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-130402233129920 | No collars found within buffer area.
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-130402233129920 | Projecting collars from Test Layer with buffer 50.0m
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-130402233129920 | DrillholeService.project_collars END: Found 1 collars.
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:242 | Thread-130402233129920 | ✓ Saving profile axes...
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:94 | Thread-130402233129920 | ✓ Saving topographic profile...
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:204 | Thread-130402233129920 | ✓ Saving interpretation data...
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:233 | Thread-130402233129920 | 3D Export features are restricted for this user.
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:242 | Thread-130402233129920 | ✓ Saving profile axes...
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:94 | Thread-130402233129920 | ✓ Saving topographic profile...
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:204 | Thread-130402233129920 | ✓ Saving interpretation data...
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:216 | Thread-130402233129920 | ✓ Saving 3D interpretation data...
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:242 | Thread-130402233129920 | ✓ Saving profile axes...
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:94 | Thread-130402233129920 | ✓ Saving topographic profile...
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:114 | Thread-130402233129920 | ✓ Saving geological profile...
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:142 | Thread-130402233129920 | ✓ Saving structural profile...
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:178 | Thread-130402233129920 | ✓ Saving drillhole data...
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:204 | Thread-130402233129920 | ✓ Saving interpretation data...
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-130402233129920 | Access denied for restricted feature: 3D Export
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:233 | Thread-130402233129920 | 3D Export features are restricted for this user.
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:242 | Thread-130402233129920 | ✓ Saving profile axes...
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:94 | Thread-130402233129920 | ✓ Saving topographic profile...
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:200 | Thread-130402233129920 | No interpretations provided for export.
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:242 | Thread-130402233129920 | ✓ Saving profile axes...
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:178 | Thread-130402233129920 | ✓ Saving drillhole data...
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:114 | Thread-130402233129920 | ✓ Saving geological profile...
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:204 | Thread-130402233129920 | ✓ Saving interpretation data...
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:216 | Thread-130402233129920 | ✓ Saving 3D interpretation data...
2026-01-08 20:33:10 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:231 | Thread-130402233129920 | Invalid section line layer, skipping 3D export.
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:204 | Thread-130402233129920 | ✓ Saving interpretation data...
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:142 | Thread-130402233129920 | ✓ Saving structural profile...
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:94 | Thread-130402233129920 | ✓ Saving topographic profile...
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-130402233129920 | Generating master profile with interval=10.00
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-130402233129920 | Generating master profile with interval=50.00
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-130402233129920 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-130402233129920 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-130402233129920 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-130402233129920 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-130402233129920 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-130402233129920 | Running geometry operation: test
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-130402233129920 | Generated 1 drillhole traces
2026-01-08 20:33:10 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-130402233129920 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-08 20:33:10 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-130402233129920 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-130402233129920 | Generated 1 drillhole traces
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-130402233129920 | Drillhole preview skipped: No Collar ID field selected.
2026-01-08 20:33:10 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-130402233129920 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 20:33:10 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-130402233129920 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 20:33:10 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-130402233129920 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 20:33:10 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-130402233129920 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 20:33:10 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-130402233129920 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-130402233129920 | Analyzing structures in Structure Layer with buffer 10m
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-130402233129920 | Processed 1 structural measurements from Structure Layer
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-130402233129920 | Successfully exported to /tmp/test_dynamic.shp
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-130402233129920 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-130402233129920 | Generated QML style: /tmp/test.qml
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-130402233129920 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-130402233129920 | Generated QML style: dummy.qml
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-130402233129920 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-130402233129920 | Generated QML style: dummy.qml
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-130402233129920 | GeologyGenerationTask started (Background Thread)
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-130402233129920 | GeologyGenerationTask finished with 1 segments
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:169 | Thread-130402233129920 | CRITICAL_OP: finalize_polygon | points=2
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-130402233129920 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-08 20:33:10 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-130402233129920 | finalize_polygon() aborted - less than 3 points
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:169 | Thread-130402233129920 | CRITICAL_OP: finalize_polygon | points=3
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-130402233129920 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-130402233129920 | finalize_polygon() - emitting polygonFinished signal for 9242ba29-3a35-4c61-9c0d-b4c9b04b561a
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-130402233129920 | Interpretation polygon finalized with 3 vertices, ID: 9242ba29-3a35-4c61-9c0d-b4c9b04b561a
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-130402233129920 | finalize_polygon() completed
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:169 | Thread-130402233129920 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-130402233129920 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-130402233129920 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-130402233129920 | ProfileInterpretationTool.reset() completed
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:169 | Thread-130402233129920 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-130402233129920 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-130402233129920 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-130402233129920 | ProfileInterpretationTool.reset() completed
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-130402233129920 | Global setting fallback: buffer_dist = 100.5
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:387 | Thread-130402233129920 | Setting saved to project: test_layer = id_123
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:387 | Thread-130402233129920 | Setting saved to project: test_layer_name = RealName
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-130402233129920 | Global setting fallback: test_layer = 1.0
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:367 | Thread-130402233129920 | Project setting hit: test_layer_name = RealName
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:424 | Thread-130402233129920 | Restoring layer: test_layer -> RealName
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-130402233129920 | Point 1 added: 0.00, 0.00
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-130402233129920 | Point 2 added: 100.00, 100.00
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-130402233129920 | Point 1 added: 50.00, 50.00
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-130402233129920 | reset() called, finalized=False
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-130402233129920 | finalize_measurement called with 1 points
2026-01-08 20:33:10 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-130402233129920 | Cannot finalize measurement with less than 2 points
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-130402233129920 | finalize_measurement called with 2 points
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-130402233129920 | Setting finalized = True
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-130402233129920 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-130402233129920 | Switching to pan tool to stop measurement
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-130402233129920 | Pan tool activated - measurement should be frozen
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-130402233129920 | reset() called, finalized=False
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-130402233129920 | reset() called, finalized=False
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-130402233129920 | reset() called, finalized=True
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-130402233129920 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-130402233129920 | reset() called, finalized=False
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-130402233129920 | ProfileMeasureTool activated
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-130402233129920 | reset() called, finalized=False
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-130402233129920 | ProfileMeasureTool deactivated
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-130402233129920 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-130402233129920 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-130402233129920 | Point 1 added: 0.00, 0.00
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-130402233129920 | Point 2 added: 10.00, 10.00
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-130402233129920 | finalize_measurement called with 2 points
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-130402233129920 | Setting finalized = True
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-130402233129920 | Measurement finalized: 2 points, 14.14m total distance
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-130402233129920 | Rubber band redrawn with final points only
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-130402233129920 | Switching to pan tool to stop measurement
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-130402233129920 | Pan tool activated - measurement should be frozen
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-130402233129920 | reset() called, finalized=True
2026-01-08 20:33:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-130402233129920 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-130402233129920 | Point 1 added: 0.00, 0.00
2026-01-08 20:33:10 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-130402233129920 | Point 2 added: 100.00, 100.00
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:136 | Thread-131376562658240 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131376562658240 | Config set: SecInterp/scale = 50000.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131376562658240 | Config set: SecInterp/vert_exag = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131376562658240 | Config set: SecInterp/buffer_dist = 100.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131376562658240 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131376562658240 | Config set: SecInterp/last_output_dir = 
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131376562658240 | Config set: SecInterp/dpi = 300
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131376562658240 | Config set: SecInterp/preview_width = 800
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131376562658240 | Config set: SecInterp/preview_height = 600
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131376562658240 | Config set: SecInterp/sampling_interval = 10.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131376562658240 | Config set: SecInterp/export_quality = 95
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131376562658240 | Config set: SecInterp/auto_lod = True
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131376562658240 | Config set: SecInterp/max_preview_points = 10000
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-131376562658240 | Configuration reset to defaults
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131376562658240 | Config set: SecInterp/scale = 200.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131376562658240 | CacheService initialized (Default TTL: 3600s)
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131376562658240 | CacheService initialized (Default TTL: 3600s)
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131376562658240 | CacheService initialized (Default TTL: 3600s)
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-131376562658240 | Projecting collars from Test Layer with buffer 50.0m
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-131376562658240 | No collars found within buffer area.
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-131376562658240 | Projecting collars from Test Layer with buffer 50.0m
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-131376562658240 | DrillholeService.project_collars END: Found 1 collars.
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:242 | Thread-131376562658240 | ✓ Saving profile axes...
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:94 | Thread-131376562658240 | ✓ Saving topographic profile...
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:204 | Thread-131376562658240 | ✓ Saving interpretation data...
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:233 | Thread-131376562658240 | 3D Export features are restricted for this user.
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:242 | Thread-131376562658240 | ✓ Saving profile axes...
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:94 | Thread-131376562658240 | ✓ Saving topographic profile...
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:204 | Thread-131376562658240 | ✓ Saving interpretation data...
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:216 | Thread-131376562658240 | ✓ Saving 3D interpretation data...
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:242 | Thread-131376562658240 | ✓ Saving profile axes...
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:94 | Thread-131376562658240 | ✓ Saving topographic profile...
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:114 | Thread-131376562658240 | ✓ Saving geological profile...
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:142 | Thread-131376562658240 | ✓ Saving structural profile...
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:178 | Thread-131376562658240 | ✓ Saving drillhole data...
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:204 | Thread-131376562658240 | ✓ Saving interpretation data...
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-131376562658240 | Access denied for restricted feature: 3D Export
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:233 | Thread-131376562658240 | 3D Export features are restricted for this user.
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:242 | Thread-131376562658240 | ✓ Saving profile axes...
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:94 | Thread-131376562658240 | ✓ Saving topographic profile...
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:200 | Thread-131376562658240 | No interpretations provided for export.
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:242 | Thread-131376562658240 | ✓ Saving profile axes...
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:178 | Thread-131376562658240 | ✓ Saving drillhole data...
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:114 | Thread-131376562658240 | ✓ Saving geological profile...
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:204 | Thread-131376562658240 | ✓ Saving interpretation data...
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:216 | Thread-131376562658240 | ✓ Saving 3D interpretation data...
2026-01-08 20:33:54 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:231 | Thread-131376562658240 | Invalid section line layer, skipping 3D export.
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:204 | Thread-131376562658240 | ✓ Saving interpretation data...
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:142 | Thread-131376562658240 | ✓ Saving structural profile...
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:94 | Thread-131376562658240 | ✓ Saving topographic profile...
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-131376562658240 | Generating master profile with interval=10.00
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-131376562658240 | Generating master profile with interval=50.00
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-131376562658240 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-131376562658240 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-131376562658240 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-131376562658240 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-131376562658240 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-131376562658240 | Running geometry operation: test
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-131376562658240 | Generated 1 drillhole traces
2026-01-08 20:33:54 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-131376562658240 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-08 20:33:54 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-131376562658240 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-131376562658240 | Generated 1 drillhole traces
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-131376562658240 | Drillhole preview skipped: No Collar ID field selected.
2026-01-08 20:33:54 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-131376562658240 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 20:33:54 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-131376562658240 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 20:33:54 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-131376562658240 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 20:33:54 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-131376562658240 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 20:33:54 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-131376562658240 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-131376562658240 | Analyzing structures in Structure Layer with buffer 10m
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-131376562658240 | Processed 1 structural measurements from Structure Layer
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-131376562658240 | Successfully exported to /tmp/test_dynamic.shp
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-131376562658240 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-131376562658240 | Generated QML style: /tmp/test.qml
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-131376562658240 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-131376562658240 | Generated QML style: dummy.qml
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-131376562658240 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-131376562658240 | Generated QML style: dummy.qml
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:530 | Thread-131376562658240 | Loaded 0 interpretations from project
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: section_layer = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: section_layer_name = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-131376562658240 | Failed to restore layer for section_layer
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: buffer_dist = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: dem_layer = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: dem_layer_name = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-131376562658240 | Failed to restore layer for dem_layer
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: dem_band = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: scale = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: vert_exag = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: geol_layer = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: geol_layer_name = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-131376562658240 | Failed to restore layer for geol_layer
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: geol_field = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: struct_layer = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: struct_layer_name = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-131376562658240 | Failed to restore layer for struct_layer
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: struct_dip_field = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: struct_strike_field = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: dip_scale_factor = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: dh_collar_layer = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-131376562658240 | Failed to restore layer for dh_collar_layer
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: dh_collar_id = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: dh_use_geom = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: dh_collar_x = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: dh_collar_y = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: dh_collar_z = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: dh_collar_depth = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: dh_survey_layer = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-131376562658240 | Failed to restore layer for dh_survey_layer
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: dh_survey_id = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: dh_survey_depth = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: dh_survey_azim = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: dh_survey_incl = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: dh_interval_layer = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-131376562658240 | Failed to restore layer for dh_interval_layer
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: dh_interval_id = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: dh_interval_from = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: dh_interval_to = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: dh_interval_lith = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: last_output_dir = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: interp_custom_fields = 1.0
2026-01-08 20:33:54 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-131376562658240 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: show_topo = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: show_geol = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: show_struct = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: show_drillholes = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: show_interpretations = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: auto_lod = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: adaptive_sampling = 1.0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: max_points = 1.0
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-131376562658240 | Settings loaded successfully from Project/Global config
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:450 | Thread-131376562658240 | Cache cleared by user
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-131376562658240 | GeologyGenerationTask started (Background Thread)
2026-01-08 20:33:54 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-131376562658240 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-131376562658240 | GeologyGenerationTask started (Background Thread)
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-131376562658240 | GeologyGenerationTask finished with 1 segments
2026-01-08 20:33:54 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-131376562658240 | Test Title: Test Message
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-131376562658240 | Test Title: Test Message
2026-01-08 20:33:54 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-131376562658240 | Test Title: Test Message
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:169 | Thread-131376562658240 | CRITICAL_OP: finalize_polygon | points=2
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-131376562658240 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-08 20:33:54 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-131376562658240 | finalize_polygon() aborted - less than 3 points
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:169 | Thread-131376562658240 | CRITICAL_OP: finalize_polygon | points=3
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-131376562658240 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-131376562658240 | finalize_polygon() - emitting polygonFinished signal for 90d7e34a-2231-496e-837f-4d376db06368
2026-01-08 20:33:54 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-131376562658240 | Interpretation polygon finalized with 3 vertices, ID: 90d7e34a-2231-496e-837f-4d376db06368
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-131376562658240 | finalize_polygon() completed
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:169 | Thread-131376562658240 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-131376562658240 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-131376562658240 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-131376562658240 | ProfileInterpretationTool.reset() completed
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:169 | Thread-131376562658240 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-131376562658240 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-131376562658240 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 20:33:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-131376562658240 | ProfileInterpretationTool.reset() completed
2026-01-08 20:33:54 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-131376562658240 | Failed to create locator for layer layer1: mock error
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-131376562658240 | ProfileInterpretationTool.activate() called
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-131376562658240 | ProfileInterpretationTool activated successfully
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-131376562658240 | ProfileInterpretationTool.deactivate() called
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-131376562658240 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-131376562658240 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-131376562658240 | ProfileInterpretationTool.reset() completed
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-131376562658240 | ProfileInterpretationTool deactivated successfully
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: buffer_dist = 100.5
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:387 | Thread-131376562658240 | Setting saved to project: test_layer = id_123
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:387 | Thread-131376562658240 | Setting saved to project: test_layer_name = RealName
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131376562658240 | Global setting fallback: test_layer = 1.0
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:367 | Thread-131376562658240 | Project setting hit: test_layer_name = RealName
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:424 | Thread-131376562658240 | Restoring layer: test_layer -> RealName
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-131376562658240 | Point 1 added: 0.00, 0.00
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-131376562658240 | Point 2 added: 100.00, 100.00
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-131376562658240 | Point 1 added: 50.00, 50.00
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-131376562658240 | reset() called, finalized=False
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-131376562658240 | finalize_measurement called with 1 points
2026-01-08 20:33:55 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-131376562658240 | Cannot finalize measurement with less than 2 points
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-131376562658240 | finalize_measurement called with 2 points
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-131376562658240 | Setting finalized = True
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-131376562658240 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-131376562658240 | Switching to pan tool to stop measurement
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-131376562658240 | Pan tool activated - measurement should be frozen
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-131376562658240 | Ignoring click - measurement is finalized
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-131376562658240 | finalize_measurement called with 2 points
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-131376562658240 | Setting finalized = True
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-131376562658240 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-131376562658240 | Switching to pan tool to stop measurement
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-131376562658240 | Pan tool activated - measurement should be frozen
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-131376562658240 | reset() called, finalized=False
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-131376562658240 | reset() called, finalized=False
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-131376562658240 | reset() called, finalized=True
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-131376562658240 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-131376562658240 | reset() called, finalized=False
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-131376562658240 | finalize_measurement called with 2 points
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-131376562658240 | Setting finalized = True
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-131376562658240 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-131376562658240 | Rubber band redrawn with final points only
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-131376562658240 | Switching to pan tool to stop measurement
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-131376562658240 | Pan tool activated - measurement should be frozen
2026-01-08 20:33:55 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-131376562658240 | Failed to create locator for layer layer1: mock error
2026-01-08 20:33:55 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-131376562658240 | Failed to create locator for layer l2: fail
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-131376562658240 | ProfileMeasureTool activated
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-131376562658240 | reset() called, finalized=False
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-131376562658240 | ProfileMeasureTool deactivated
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-131376562658240 | create_drillhole_trace_layer called with 1 holes
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-131376562658240 | Adding 1 drillhole trace features to layer
2026-01-08 20:33:55 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-131376562658240 | Failed to create memory layer: Fail
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-131376562658240 | create_drillhole_trace_layer called with 0 holes
2026-01-08 20:33:55 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-131376562658240 | No drillhole data provided for trace layer
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-131376562658240 | create_drillhole_trace_layer called with 1 holes
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-131376562658240 | Skipping hole H1: insufficient trace points (1)
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-131376562658240 | Adding 0 drillhole trace features to layer
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-131376562658240 | create_drillhole_trace_layer called with 1 holes
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131376562658240 | render() called
2026-01-08 20:33:55 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-131376562658240 | No valid layers to render
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131376562658240 | render() called
2026-01-08 20:33:55 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-131376562658240 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131376562658240 | render() called
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131376562658240 | render() called
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131376562658240 | render() called
2026-01-08 20:33:55 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-131376562658240 | No valid layers to render
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131376562658240 | render() called
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131376562658240 | render() called
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-131376562658240 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-131376562658240 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-131376562658240 | Point 1 added: 0.00, 0.00
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-131376562658240 | Point 2 added: 10.00, 10.00
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-131376562658240 | finalize_measurement called with 2 points
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-131376562658240 | Setting finalized = True
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-131376562658240 | Measurement finalized: 2 points, 14.14m total distance
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-131376562658240 | Rubber band redrawn with final points only
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-131376562658240 | Switching to pan tool to stop measurement
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-131376562658240 | Pan tool activated - measurement should be frozen
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-131376562658240 | reset() called, finalized=True
2026-01-08 20:33:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-131376562658240 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-131376562658240 | Point 1 added: 0.00, 0.00
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-131376562658240 | Point 2 added: 100.00, 100.00
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131376562658240 | CacheService initialized (Default TTL: 3600s)
2026-01-08 20:33:55 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-131376562658240 | ProfileController initialized
2026-01-08 20:37:31 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:135 | Thread-130963729243072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:37:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-130963729243072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:37:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-130963729243072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:37:31 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-130963729243072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:37:31 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-130963729243072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:37:31 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:135 | Thread-130963729243072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:37:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-130963729243072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:37:32 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:135 | Thread-130963729243072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:37:33 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-130963729243072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:37:33 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-130963729243072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:37:33 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-130963729243072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:37:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-130963729243072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:41:55 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:135 | Thread-125461218499520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:41:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-125461218499520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:41:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-125461218499520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:41:55 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-125461218499520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:41:55 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-125461218499520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:41:55 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:135 | Thread-125461218499520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:41:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-125461218499520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:41:56 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:135 | Thread-125461218499520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:41:57 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-125461218499520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:41:57 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-125461218499520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:41:57 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-125461218499520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 20:41:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-125461218499520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:135 | Thread-134700837985216 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134700837985216 | Config set: SecInterp/scale = 50000.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134700837985216 | Config set: SecInterp/vert_exag = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134700837985216 | Config set: SecInterp/buffer_dist = 100.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134700837985216 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134700837985216 | Config set: SecInterp/last_output_dir = 
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134700837985216 | Config set: SecInterp/dpi = 300
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134700837985216 | Config set: SecInterp/preview_width = 800
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134700837985216 | Config set: SecInterp/preview_height = 600
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134700837985216 | Config set: SecInterp/sampling_interval = 10.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134700837985216 | Config set: SecInterp/export_quality = 95
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134700837985216 | Config set: SecInterp/auto_lod = True
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134700837985216 | Config set: SecInterp/max_preview_points = 10000
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-134700837985216 | Configuration reset to defaults
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-134700837985216 | Config set: SecInterp/scale = 200.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-134700837985216 | CacheService initialized (Default TTL: 3600s)
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-134700837985216 | CacheService initialized (Default TTL: 3600s)
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-134700837985216 | CacheService initialized (Default TTL: 3600s)
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-134700837985216 | Projecting collars from Test Layer with buffer 50.0m
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-134700837985216 | No collars found within buffer area.
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-134700837985216 | Projecting collars from Test Layer with buffer 50.0m
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-134700837985216 | DrillholeService.project_collars END: Found 1 collars.
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:242 | Thread-134700837985216 | ✓ Saving profile axes...
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:94 | Thread-134700837985216 | ✓ Saving topographic profile...
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:204 | Thread-134700837985216 | ✓ Saving interpretation data...
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:233 | Thread-134700837985216 | 3D Export features are restricted for this user.
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:242 | Thread-134700837985216 | ✓ Saving profile axes...
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:94 | Thread-134700837985216 | ✓ Saving topographic profile...
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:204 | Thread-134700837985216 | ✓ Saving interpretation data...
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:216 | Thread-134700837985216 | ✓ Saving 3D interpretation data...
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:242 | Thread-134700837985216 | ✓ Saving profile axes...
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:94 | Thread-134700837985216 | ✓ Saving topographic profile...
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:114 | Thread-134700837985216 | ✓ Saving geological profile...
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:142 | Thread-134700837985216 | ✓ Saving structural profile...
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:178 | Thread-134700837985216 | ✓ Saving drillhole data...
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:204 | Thread-134700837985216 | ✓ Saving interpretation data...
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-134700837985216 | Access denied for restricted feature: 3D Export
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:233 | Thread-134700837985216 | 3D Export features are restricted for this user.
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:242 | Thread-134700837985216 | ✓ Saving profile axes...
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:94 | Thread-134700837985216 | ✓ Saving topographic profile...
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:200 | Thread-134700837985216 | No interpretations provided for export.
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:242 | Thread-134700837985216 | ✓ Saving profile axes...
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:178 | Thread-134700837985216 | ✓ Saving drillhole data...
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:114 | Thread-134700837985216 | ✓ Saving geological profile...
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:204 | Thread-134700837985216 | ✓ Saving interpretation data...
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:216 | Thread-134700837985216 | ✓ Saving 3D interpretation data...
2026-01-08 21:46:22 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:231 | Thread-134700837985216 | Invalid section line layer, skipping 3D export.
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:204 | Thread-134700837985216 | ✓ Saving interpretation data...
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:142 | Thread-134700837985216 | ✓ Saving structural profile...
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:94 | Thread-134700837985216 | ✓ Saving topographic profile...
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-134700837985216 | Generating master profile with interval=10.00
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-134700837985216 | Generating master profile with interval=50.00
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-134700837985216 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-134700837985216 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-134700837985216 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-134700837985216 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-134700837985216 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-134700837985216 | Running geometry operation: test
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-134700837985216 | Generated 1 drillhole traces
2026-01-08 21:46:22 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-134700837985216 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-08 21:46:22 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-134700837985216 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-134700837985216 | Generated 1 drillhole traces
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-134700837985216 | Drillhole preview skipped: No Collar ID field selected.
2026-01-08 21:46:22 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-134700837985216 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 21:46:22 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-134700837985216 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 21:46:22 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-134700837985216 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 21:46:22 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-134700837985216 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 21:46:22 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-134700837985216 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-134700837985216 | Analyzing structures in Structure Layer with buffer 10m
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-134700837985216 | Processed 1 structural measurements from Structure Layer
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-134700837985216 | Successfully exported to /tmp/test_dynamic.shp
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-134700837985216 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-134700837985216 | Generated QML style: /tmp/test.qml
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-134700837985216 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-134700837985216 | Generated QML style: dummy.qml
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-134700837985216 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-134700837985216 | Generated QML style: dummy.qml
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:530 | Thread-134700837985216 | Loaded 0 interpretations from project
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: section_layer = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: section_layer_name = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-134700837985216 | Failed to restore layer for section_layer
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: buffer_dist = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: dem_layer = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: dem_layer_name = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-134700837985216 | Failed to restore layer for dem_layer
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: dem_band = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: scale = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: vert_exag = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: geol_layer = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: geol_layer_name = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-134700837985216 | Failed to restore layer for geol_layer
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: geol_field = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: struct_layer = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: struct_layer_name = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-134700837985216 | Failed to restore layer for struct_layer
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: struct_dip_field = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: struct_strike_field = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: dip_scale_factor = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: dh_collar_layer = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-134700837985216 | Failed to restore layer for dh_collar_layer
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: dh_collar_id = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: dh_use_geom = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: dh_collar_x = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: dh_collar_y = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: dh_collar_z = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: dh_collar_depth = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: dh_survey_layer = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-134700837985216 | Failed to restore layer for dh_survey_layer
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: dh_survey_id = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: dh_survey_depth = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: dh_survey_azim = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: dh_survey_incl = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: dh_interval_layer = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-134700837985216 | Failed to restore layer for dh_interval_layer
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: dh_interval_id = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: dh_interval_from = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: dh_interval_to = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: dh_interval_lith = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: last_output_dir = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: interp_custom_fields = 1.0
2026-01-08 21:46:22 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-134700837985216 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: show_topo = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: show_geol = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: show_struct = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: show_drillholes = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: show_interpretations = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: auto_lod = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: adaptive_sampling = 1.0
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: max_points = 1.0
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-134700837985216 | Settings loaded successfully from Project/Global config
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:450 | Thread-134700837985216 | Cache cleared by user
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-134700837985216 | GeologyGenerationTask started (Background Thread)
2026-01-08 21:46:22 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-134700837985216 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-134700837985216 | GeologyGenerationTask started (Background Thread)
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-134700837985216 | GeologyGenerationTask finished with 1 segments
2026-01-08 21:46:22 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-134700837985216 | Test Title: Test Message
2026-01-08 21:46:22 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-134700837985216 | Test Title: Test Message
2026-01-08 21:46:22 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-134700837985216 | Test Title: Test Message
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-134700837985216 | CRITICAL_OP: finalize_polygon | points=2
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-134700837985216 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-08 21:46:22 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-134700837985216 | finalize_polygon() aborted - less than 3 points
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-134700837985216 | CRITICAL_OP: finalize_polygon | points=3
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-134700837985216 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-08 21:46:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-134700837985216 | finalize_polygon() - emitting polygonFinished signal for a6db3e29-70ea-411d-a180-95b0f7c852ba
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-134700837985216 | Interpretation polygon finalized with 3 vertices, ID: a6db3e29-70ea-411d-a180-95b0f7c852ba
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-134700837985216 | finalize_polygon() completed
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-134700837985216 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-134700837985216 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-134700837985216 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-134700837985216 | ProfileInterpretationTool.reset() completed
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-134700837985216 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-134700837985216 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-134700837985216 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-134700837985216 | ProfileInterpretationTool.reset() completed
2026-01-08 21:46:23 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-134700837985216 | Failed to create locator for layer layer1: mock error
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-134700837985216 | ProfileInterpretationTool.activate() called
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-134700837985216 | ProfileInterpretationTool activated successfully
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-134700837985216 | ProfileInterpretationTool.deactivate() called
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-134700837985216 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-134700837985216 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-134700837985216 | ProfileInterpretationTool.reset() completed
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-134700837985216 | ProfileInterpretationTool deactivated successfully
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: buffer_dist = 100.5
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:387 | Thread-134700837985216 | Setting saved to project: test_layer = id_123
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:387 | Thread-134700837985216 | Setting saved to project: test_layer_name = RealName
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134700837985216 | Global setting fallback: test_layer = 1.0
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:367 | Thread-134700837985216 | Project setting hit: test_layer_name = RealName
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:424 | Thread-134700837985216 | Restoring layer: test_layer -> RealName
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-134700837985216 | Point 1 added: 0.00, 0.00
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-134700837985216 | Point 2 added: 100.00, 100.00
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-134700837985216 | Point 1 added: 50.00, 50.00
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-134700837985216 | reset() called, finalized=False
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-134700837985216 | finalize_measurement called with 1 points
2026-01-08 21:46:23 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-134700837985216 | Cannot finalize measurement with less than 2 points
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-134700837985216 | finalize_measurement called with 2 points
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-134700837985216 | Setting finalized = True
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-134700837985216 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-134700837985216 | Switching to pan tool to stop measurement
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-134700837985216 | Pan tool activated - measurement should be frozen
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-134700837985216 | Ignoring click - measurement is finalized
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-134700837985216 | finalize_measurement called with 2 points
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-134700837985216 | Setting finalized = True
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-134700837985216 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-134700837985216 | Switching to pan tool to stop measurement
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-134700837985216 | Pan tool activated - measurement should be frozen
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-134700837985216 | reset() called, finalized=False
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-134700837985216 | reset() called, finalized=False
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-134700837985216 | reset() called, finalized=True
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-134700837985216 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-134700837985216 | reset() called, finalized=False
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-134700837985216 | finalize_measurement called with 2 points
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-134700837985216 | Setting finalized = True
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-134700837985216 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-134700837985216 | Rubber band redrawn with final points only
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-134700837985216 | Switching to pan tool to stop measurement
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-134700837985216 | Pan tool activated - measurement should be frozen
2026-01-08 21:46:23 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-134700837985216 | Failed to create locator for layer layer1: mock error
2026-01-08 21:46:23 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-134700837985216 | Failed to create locator for layer l2: fail
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-134700837985216 | ProfileMeasureTool activated
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-134700837985216 | reset() called, finalized=False
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-134700837985216 | ProfileMeasureTool deactivated
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-134700837985216 | create_drillhole_trace_layer called with 1 holes
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-134700837985216 | Adding 1 drillhole trace features to layer
2026-01-08 21:46:23 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-134700837985216 | Failed to create memory layer: Fail
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-134700837985216 | create_drillhole_trace_layer called with 0 holes
2026-01-08 21:46:23 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-134700837985216 | No drillhole data provided for trace layer
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-134700837985216 | create_drillhole_trace_layer called with 1 holes
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-134700837985216 | Skipping hole H1: insufficient trace points (1)
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-134700837985216 | Adding 0 drillhole trace features to layer
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-134700837985216 | create_drillhole_trace_layer called with 1 holes
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134700837985216 | render() called
2026-01-08 21:46:23 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-134700837985216 | No valid layers to render
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134700837985216 | render() called
2026-01-08 21:46:23 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-134700837985216 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134700837985216 | render() called
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134700837985216 | render() called
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134700837985216 | render() called
2026-01-08 21:46:23 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-134700837985216 | No valid layers to render
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134700837985216 | render() called
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134700837985216 | render() called
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-134700837985216 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-134700837985216 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-134700837985216 | Point 1 added: 0.00, 0.00
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-134700837985216 | Point 2 added: 10.00, 10.00
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-134700837985216 | finalize_measurement called with 2 points
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-134700837985216 | Setting finalized = True
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-134700837985216 | Measurement finalized: 2 points, 14.14m total distance
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-134700837985216 | Rubber band redrawn with final points only
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-134700837985216 | Switching to pan tool to stop measurement
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-134700837985216 | Pan tool activated - measurement should be frozen
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-134700837985216 | reset() called, finalized=True
2026-01-08 21:46:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-134700837985216 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-134700837985216 | Point 1 added: 0.00, 0.00
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-134700837985216 | Point 2 added: 100.00, 100.00
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-134700837985216 | CacheService initialized (Default TTL: 3600s)
2026-01-08 21:46:23 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-134700837985216 | ProfileController initialized
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-140282183384000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:530 | Thread-140282183384000 | Loaded 0 interpretations from project
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: section_layer = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: section_layer_name = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-140282183384000 | Failed to restore layer for section_layer
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: buffer_dist = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: dem_layer = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: dem_layer_name = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-140282183384000 | Failed to restore layer for dem_layer
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: dem_band = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: scale = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: vert_exag = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: geol_layer = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: geol_layer_name = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-140282183384000 | Failed to restore layer for geol_layer
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: geol_field = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: struct_layer = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: struct_layer_name = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-140282183384000 | Failed to restore layer for struct_layer
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: struct_dip_field = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: struct_strike_field = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: dip_scale_factor = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: dh_collar_layer = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-140282183384000 | Failed to restore layer for dh_collar_layer
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: dh_collar_id = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: dh_use_geom = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: dh_collar_x = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: dh_collar_y = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: dh_collar_z = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: dh_collar_depth = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: dh_survey_layer = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-140282183384000 | Failed to restore layer for dh_survey_layer
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: dh_survey_id = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: dh_survey_depth = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: dh_survey_azim = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: dh_survey_incl = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: dh_interval_layer = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-140282183384000 | Failed to restore layer for dh_interval_layer
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: dh_interval_id = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: dh_interval_from = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: dh_interval_to = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: dh_interval_lith = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: last_output_dir = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: interp_custom_fields = 1.0
2026-01-08 21:46:32 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-140282183384000 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: show_topo = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: show_geol = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: show_struct = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: show_drillholes = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: show_interpretations = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: auto_lod = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: adaptive_sampling = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: max_points = 1.0
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-140282183384000 | Settings loaded successfully from Project/Global config
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:450 | Thread-140282183384000 | Cache cleared by user
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-140282183384000 | GeologyGenerationTask started (Background Thread)
2026-01-08 21:46:32 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-140282183384000 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-140282183384000 | GeologyGenerationTask started (Background Thread)
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-140282183384000 | GeologyGenerationTask finished with 1 segments
2026-01-08 21:46:32 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-140282183384000 | Test Title: Test Message
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-140282183384000 | Test Title: Test Message
2026-01-08 21:46:32 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-140282183384000 | Test Title: Test Message
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-140282183384000 | CRITICAL_OP: finalize_polygon | points=2
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-140282183384000 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-08 21:46:32 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-140282183384000 | finalize_polygon() aborted - less than 3 points
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-140282183384000 | CRITICAL_OP: finalize_polygon | points=3
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-140282183384000 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-140282183384000 | finalize_polygon() - emitting polygonFinished signal for 149f04c8-902b-4701-ba74-d416bc38393d
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-140282183384000 | Interpretation polygon finalized with 3 vertices, ID: 149f04c8-902b-4701-ba74-d416bc38393d
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-140282183384000 | finalize_polygon() completed
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-140282183384000 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-140282183384000 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-140282183384000 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-140282183384000 | ProfileInterpretationTool.reset() completed
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-140282183384000 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-140282183384000 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-140282183384000 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-140282183384000 | ProfileInterpretationTool.reset() completed
2026-01-08 21:46:32 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-140282183384000 | Failed to create locator for layer layer1: mock error
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-140282183384000 | ProfileInterpretationTool.activate() called
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-140282183384000 | ProfileInterpretationTool activated successfully
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-140282183384000 | ProfileInterpretationTool.deactivate() called
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-140282183384000 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-140282183384000 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-140282183384000 | ProfileInterpretationTool.reset() completed
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-140282183384000 | ProfileInterpretationTool deactivated successfully
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: buffer_dist = 100.5
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:387 | Thread-140282183384000 | Setting saved to project: test_layer = id_123
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:387 | Thread-140282183384000 | Setting saved to project: test_layer_name = RealName
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140282183384000 | Global setting fallback: test_layer = 1.0
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:367 | Thread-140282183384000 | Project setting hit: test_layer_name = RealName
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:424 | Thread-140282183384000 | Restoring layer: test_layer -> RealName
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-140282183384000 | Point 1 added: 0.00, 0.00
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-140282183384000 | Point 2 added: 100.00, 100.00
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-140282183384000 | Point 1 added: 50.00, 50.00
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-140282183384000 | reset() called, finalized=False
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-140282183384000 | finalize_measurement called with 1 points
2026-01-08 21:46:32 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-140282183384000 | Cannot finalize measurement with less than 2 points
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-140282183384000 | finalize_measurement called with 2 points
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-140282183384000 | Setting finalized = True
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-140282183384000 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-140282183384000 | Switching to pan tool to stop measurement
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-140282183384000 | Pan tool activated - measurement should be frozen
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-140282183384000 | Ignoring click - measurement is finalized
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-140282183384000 | finalize_measurement called with 2 points
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-140282183384000 | Setting finalized = True
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-140282183384000 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-140282183384000 | Switching to pan tool to stop measurement
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-140282183384000 | Pan tool activated - measurement should be frozen
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-140282183384000 | reset() called, finalized=False
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-140282183384000 | reset() called, finalized=False
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-140282183384000 | reset() called, finalized=True
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-140282183384000 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-140282183384000 | reset() called, finalized=False
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-140282183384000 | finalize_measurement called with 2 points
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-140282183384000 | Setting finalized = True
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-140282183384000 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-140282183384000 | Rubber band redrawn with final points only
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-140282183384000 | Switching to pan tool to stop measurement
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-140282183384000 | Pan tool activated - measurement should be frozen
2026-01-08 21:46:32 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-140282183384000 | Failed to create locator for layer layer1: mock error
2026-01-08 21:46:32 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-140282183384000 | Failed to create locator for layer l2: fail
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-140282183384000 | ProfileMeasureTool activated
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-140282183384000 | reset() called, finalized=False
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-140282183384000 | ProfileMeasureTool deactivated
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-140282183384000 | create_drillhole_trace_layer called with 1 holes
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-140282183384000 | Adding 1 drillhole trace features to layer
2026-01-08 21:46:32 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-140282183384000 | Failed to create memory layer: Fail
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-140282183384000 | create_drillhole_trace_layer called with 0 holes
2026-01-08 21:46:32 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-140282183384000 | No drillhole data provided for trace layer
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-140282183384000 | create_drillhole_trace_layer called with 1 holes
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-140282183384000 | Skipping hole H1: insufficient trace points (1)
2026-01-08 21:46:32 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-140282183384000 | Adding 0 drillhole trace features to layer
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-140282183384000 | create_drillhole_trace_layer called with 1 holes
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-140282183384000 | render() called
2026-01-08 21:46:32 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-140282183384000 | No valid layers to render
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-140282183384000 | render() called
2026-01-08 21:46:32 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-140282183384000 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-08 21:46:32 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-140282183384000 | render() called
2026-01-08 21:46:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-140282183384000 | render() called
2026-01-08 21:46:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-140282183384000 | render() called
2026-01-08 21:46:33 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-140282183384000 | No valid layers to render
2026-01-08 21:46:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-140282183384000 | render() called
2026-01-08 21:46:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-140282183384000 | render() called
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-137204898618304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:530 | Thread-137204898618304 | Loaded 0 interpretations from project
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: section_layer = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: section_layer_name = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-137204898618304 | Failed to restore layer for section_layer
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: buffer_dist = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: dem_layer = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: dem_layer_name = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-137204898618304 | Failed to restore layer for dem_layer
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: dem_band = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: scale = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: vert_exag = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: geol_layer = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: geol_layer_name = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-137204898618304 | Failed to restore layer for geol_layer
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: geol_field = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: struct_layer = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: struct_layer_name = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-137204898618304 | Failed to restore layer for struct_layer
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: struct_dip_field = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: struct_strike_field = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: dip_scale_factor = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: dh_collar_layer = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-137204898618304 | Failed to restore layer for dh_collar_layer
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: dh_collar_id = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: dh_use_geom = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: dh_collar_x = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: dh_collar_y = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: dh_collar_z = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: dh_collar_depth = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: dh_survey_layer = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-137204898618304 | Failed to restore layer for dh_survey_layer
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: dh_survey_id = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: dh_survey_depth = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: dh_survey_azim = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: dh_survey_incl = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: dh_interval_layer = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-137204898618304 | Failed to restore layer for dh_interval_layer
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: dh_interval_id = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: dh_interval_from = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: dh_interval_to = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: dh_interval_lith = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: last_output_dir = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: interp_custom_fields = 1.0
2026-01-08 21:47:18 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-137204898618304 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: show_topo = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: show_geol = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: show_struct = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: show_drillholes = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: show_interpretations = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: auto_lod = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: adaptive_sampling = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: max_points = 1.0
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-137204898618304 | Settings loaded successfully from Project/Global config
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:450 | Thread-137204898618304 | Cache cleared by user
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-137204898618304 | GeologyGenerationTask started (Background Thread)
2026-01-08 21:47:18 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-137204898618304 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-137204898618304 | GeologyGenerationTask started (Background Thread)
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-137204898618304 | GeologyGenerationTask finished with 1 segments
2026-01-08 21:47:18 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-137204898618304 | Test Title: Test Message
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-137204898618304 | Test Title: Test Message
2026-01-08 21:47:18 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-137204898618304 | Test Title: Test Message
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-137204898618304 | CRITICAL_OP: finalize_polygon | points=2
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-137204898618304 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-08 21:47:18 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-137204898618304 | finalize_polygon() aborted - less than 3 points
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-137204898618304 | CRITICAL_OP: finalize_polygon | points=3
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-137204898618304 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-137204898618304 | finalize_polygon() - emitting polygonFinished signal for 70ea4e6f-8bcc-405d-a6c2-9df6d53bf7c4
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-137204898618304 | Interpretation polygon finalized with 3 vertices, ID: 70ea4e6f-8bcc-405d-a6c2-9df6d53bf7c4
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-137204898618304 | finalize_polygon() completed
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-137204898618304 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-137204898618304 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-137204898618304 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-137204898618304 | ProfileInterpretationTool.reset() completed
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-137204898618304 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-137204898618304 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-137204898618304 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-137204898618304 | ProfileInterpretationTool.reset() completed
2026-01-08 21:47:18 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-137204898618304 | Failed to create locator for layer layer1: mock error
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-137204898618304 | ProfileInterpretationTool.activate() called
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-137204898618304 | ProfileInterpretationTool activated successfully
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-137204898618304 | ProfileInterpretationTool.deactivate() called
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-137204898618304 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-137204898618304 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-137204898618304 | ProfileInterpretationTool.reset() completed
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-137204898618304 | ProfileInterpretationTool deactivated successfully
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: buffer_dist = 100.5
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:387 | Thread-137204898618304 | Setting saved to project: test_layer = id_123
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:387 | Thread-137204898618304 | Setting saved to project: test_layer_name = RealName
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137204898618304 | Global setting fallback: test_layer = 1.0
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:367 | Thread-137204898618304 | Project setting hit: test_layer_name = RealName
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:424 | Thread-137204898618304 | Restoring layer: test_layer -> RealName
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-137204898618304 | Point 1 added: 0.00, 0.00
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-137204898618304 | Point 2 added: 100.00, 100.00
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-137204898618304 | Point 1 added: 50.00, 50.00
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-137204898618304 | reset() called, finalized=False
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-137204898618304 | finalize_measurement called with 1 points
2026-01-08 21:47:18 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-137204898618304 | Cannot finalize measurement with less than 2 points
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-137204898618304 | finalize_measurement called with 2 points
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-137204898618304 | Setting finalized = True
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-137204898618304 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-137204898618304 | Switching to pan tool to stop measurement
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-137204898618304 | Pan tool activated - measurement should be frozen
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-137204898618304 | Ignoring click - measurement is finalized
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-137204898618304 | finalize_measurement called with 2 points
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-137204898618304 | Setting finalized = True
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-137204898618304 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-137204898618304 | Switching to pan tool to stop measurement
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-137204898618304 | Pan tool activated - measurement should be frozen
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-137204898618304 | reset() called, finalized=False
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-137204898618304 | reset() called, finalized=False
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-137204898618304 | reset() called, finalized=True
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-137204898618304 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-137204898618304 | reset() called, finalized=False
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-137204898618304 | finalize_measurement called with 2 points
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-137204898618304 | Setting finalized = True
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-137204898618304 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-137204898618304 | Rubber band redrawn with final points only
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-137204898618304 | Switching to pan tool to stop measurement
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-137204898618304 | Pan tool activated - measurement should be frozen
2026-01-08 21:47:18 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-137204898618304 | Failed to create locator for layer layer1: mock error
2026-01-08 21:47:18 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-137204898618304 | Failed to create locator for layer l2: fail
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-137204898618304 | ProfileMeasureTool activated
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-137204898618304 | reset() called, finalized=False
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-137204898618304 | ProfileMeasureTool deactivated
2026-01-08 21:47:18 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-137204898618304 | create_drillhole_trace_layer called with 1 holes
2026-01-08 21:47:18 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-137204898618304 | Adding 1 drillhole trace features to layer
2026-01-08 21:47:19 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-137204898618304 | Failed to create memory layer: Fail
2026-01-08 21:47:19 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-137204898618304 | create_drillhole_trace_layer called with 0 holes
2026-01-08 21:47:19 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-137204898618304 | No drillhole data provided for trace layer
2026-01-08 21:47:19 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-137204898618304 | create_drillhole_trace_layer called with 1 holes
2026-01-08 21:47:19 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-137204898618304 | Skipping hole H1: insufficient trace points (1)
2026-01-08 21:47:19 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-137204898618304 | Adding 0 drillhole trace features to layer
2026-01-08 21:47:19 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-137204898618304 | create_drillhole_trace_layer called with 1 holes
2026-01-08 21:47:19 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137204898618304 | render() called
2026-01-08 21:47:19 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-137204898618304 | No valid layers to render
2026-01-08 21:47:19 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137204898618304 | render() called
2026-01-08 21:47:19 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-137204898618304 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-08 21:47:19 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137204898618304 | render() called
2026-01-08 21:47:19 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137204898618304 | render() called
2026-01-08 21:47:19 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137204898618304 | render() called
2026-01-08 21:47:19 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-137204898618304 | No valid layers to render
2026-01-08 21:47:19 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137204898618304 | render() called
2026-01-08 21:47:19 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137204898618304 | render() called
2026-01-08 22:03:32 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:135 | Thread-124781618142144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 22:03:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-124781618142144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 22:03:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-124781618142144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 22:03:32 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-124781618142144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 22:03:32 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-124781618142144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 22:03:32 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:135 | Thread-124781618142144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 22:03:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-124781618142144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 22:03:33 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:135 | Thread-124781618142144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 22:03:33 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-124781618142144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 22:03:33 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-124781618142144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 22:03:33 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-124781618142144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 22:03:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-124781618142144 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 22:59:42 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:135 | Thread-136072431471552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 22:59:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-136072431471552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 22:59:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-136072431471552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 22:59:42 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-136072431471552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 22:59:42 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-136072431471552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 22:59:42 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:135 | Thread-136072431471552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 22:59:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-136072431471552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 22:59:43 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:135 | Thread-136072431471552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 22:59:43 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-136072431471552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 22:59:43 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-136072431471552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 22:59:43 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-136072431471552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 22:59:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-136072431471552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:135 | Thread-133414759607232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133414759607232 | Config set: SecInterp/scale = 50000.0
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133414759607232 | Config set: SecInterp/vert_exag = 1.0
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133414759607232 | Config set: SecInterp/buffer_dist = 100.0
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133414759607232 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133414759607232 | Config set: SecInterp/last_output_dir = 
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133414759607232 | Config set: SecInterp/dpi = 300
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133414759607232 | Config set: SecInterp/preview_width = 800
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133414759607232 | Config set: SecInterp/preview_height = 600
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133414759607232 | Config set: SecInterp/sampling_interval = 10.0
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133414759607232 | Config set: SecInterp/export_quality = 95
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133414759607232 | Config set: SecInterp/auto_lod = True
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133414759607232 | Config set: SecInterp/max_preview_points = 10000
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-133414759607232 | Configuration reset to defaults
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-133414759607232 | Config set: SecInterp/scale = 200.0
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133414759607232 | CacheService initialized (Default TTL: 3600s)
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133414759607232 | CacheService initialized (Default TTL: 3600s)
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133414759607232 | CacheService initialized (Default TTL: 3600s)
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-133414759607232 | Projecting collars from Test Layer with buffer 50.0m
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-133414759607232 | No collars found within buffer area.
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-133414759607232 | Projecting collars from Test Layer with buffer 50.0m
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-133414759607232 | DrillholeService.project_collars END: Found 1 collars.
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-133414759607232 | ✓ Saving profile axes...
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-133414759607232 | ✓ Saving topographic profile...
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-133414759607232 | ✓ Saving profile axes...
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-133414759607232 | ✓ Saving interpretation data...
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:253 | Thread-133414759607232 | 3D Export features are restricted for this user.
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-133414759607232 | ✓ Saving topographic profile...
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-133414759607232 | ✓ Saving profile axes...
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-133414759607232 | ✓ Saving interpretation data...
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:236 | Thread-133414759607232 | ✓ Saving 3D interpretation data...
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-133414759607232 | ✓ Saving topographic profile...
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-133414759607232 | ✓ Saving profile axes...
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:134 | Thread-133414759607232 | ✓ Saving geological profile...
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:162 | Thread-133414759607232 | ✓ Saving structural profile...
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:198 | Thread-133414759607232 | ✓ Saving drillhole data...
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-133414759607232 | ✓ Saving interpretation data...
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-133414759607232 | Access denied for restricted feature: 3D Export
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:253 | Thread-133414759607232 | 3D Export features are restricted for this user.
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-133414759607232 | ✓ Saving topographic profile...
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-133414759607232 | ✓ Saving profile axes...
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:220 | Thread-133414759607232 | No interpretations provided for export.
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:198 | Thread-133414759607232 | ✓ Saving drillhole data...
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:134 | Thread-133414759607232 | ✓ Saving geological profile...
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-133414759607232 | ✓ Saving interpretation data...
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:236 | Thread-133414759607232 | ✓ Saving 3D interpretation data...
2026-01-08 23:20:59 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:251 | Thread-133414759607232 | Invalid section line layer, skipping 3D export.
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-133414759607232 | ✓ Saving interpretation data...
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:162 | Thread-133414759607232 | ✓ Saving structural profile...
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-133414759607232 | ✓ Saving topographic profile...
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-133414759607232 | Generating master profile with interval=10.00
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-133414759607232 | Generating master profile with interval=50.00
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-133414759607232 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-133414759607232 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-133414759607232 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-133414759607232 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-133414759607232 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-133414759607232 | Running geometry operation: test
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-133414759607232 | Generated 1 drillhole traces
2026-01-08 23:20:59 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-133414759607232 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-08 23:20:59 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-133414759607232 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-133414759607232 | Generated 1 drillhole traces
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-133414759607232 | Drillhole preview skipped: No Collar ID field selected.
2026-01-08 23:20:59 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-133414759607232 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 23:20:59 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-133414759607232 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 23:20:59 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-133414759607232 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 23:20:59 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-133414759607232 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-08 23:20:59 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-133414759607232 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-133414759607232 | Analyzing structures in Structure Layer with buffer 10m
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-133414759607232 | Processed 1 structural measurements from Structure Layer
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-133414759607232 | Successfully exported to /tmp/test_dynamic.shp
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-133414759607232 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-133414759607232 | Generated QML style: /tmp/test.qml
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-133414759607232 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-133414759607232 | Generated QML style: dummy.qml
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-133414759607232 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-133414759607232 | Generated QML style: dummy.qml
2026-01-08 23:20:59 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:530 | Thread-133414759607232 | Loaded 0 interpretations from project
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: section_layer = 1.0
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: section_layer_name = 1.0
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-133414759607232 | Failed to restore layer for section_layer
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: buffer_dist = 1.0
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: dem_layer = 1.0
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: dem_layer_name = 1.0
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-133414759607232 | Failed to restore layer for dem_layer
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: dem_band = 1.0
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: scale = 1.0
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: vert_exag = 1.0
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: geol_layer = 1.0
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: geol_layer_name = 1.0
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-133414759607232 | Failed to restore layer for geol_layer
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: geol_field = 1.0
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: struct_layer = 1.0
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: struct_layer_name = 1.0
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-133414759607232 | Failed to restore layer for struct_layer
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: struct_dip_field = 1.0
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: struct_strike_field = 1.0
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: dip_scale_factor = 1.0
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: dh_collar_layer = 1.0
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-133414759607232 | Failed to restore layer for dh_collar_layer
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: dh_collar_id = 1.0
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: dh_use_geom = 1.0
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: dh_collar_x = 1.0
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: dh_collar_y = 1.0
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: dh_collar_z = 1.0
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: dh_collar_depth = 1.0
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: dh_survey_layer = 1.0
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-08 23:20:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-133414759607232 | Failed to restore layer for dh_survey_layer
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: dh_survey_id = 1.0
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: dh_survey_depth = 1.0
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: dh_survey_azim = 1.0
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: dh_survey_incl = 1.0
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: dh_interval_layer = 1.0
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:430 | Thread-133414759607232 | Failed to restore layer for dh_interval_layer
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: dh_interval_id = 1.0
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: dh_interval_from = 1.0
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: dh_interval_to = 1.0
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: dh_interval_lith = 1.0
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: last_output_dir = 1.0
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: interp_custom_fields = 1.0
2026-01-08 23:21:00 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-133414759607232 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: show_topo = 1.0
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: show_geol = 1.0
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: show_struct = 1.0
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: show_drillholes = 1.0
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: show_interpretations = 1.0
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: auto_lod = 1.0
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: adaptive_sampling = 1.0
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: max_points = 1.0
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-133414759607232 | Settings loaded successfully from Project/Global config
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:450 | Thread-133414759607232 | Cache cleared by user
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-133414759607232 | GeologyGenerationTask started (Background Thread)
2026-01-08 23:21:00 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-133414759607232 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-133414759607232 | GeologyGenerationTask started (Background Thread)
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-133414759607232 | GeologyGenerationTask finished with 1 segments
2026-01-08 23:21:00 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-133414759607232 | Test Title: Test Message
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-133414759607232 | Test Title: Test Message
2026-01-08 23:21:00 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-133414759607232 | Test Title: Test Message
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-133414759607232 | CRITICAL_OP: finalize_polygon | points=2
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-133414759607232 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-08 23:21:00 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-133414759607232 | finalize_polygon() aborted - less than 3 points
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-133414759607232 | CRITICAL_OP: finalize_polygon | points=3
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-133414759607232 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-133414759607232 | finalize_polygon() - emitting polygonFinished signal for fba7d2e5-7d40-43a1-9634-64e9f6b07a31
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-133414759607232 | Interpretation polygon finalized with 3 vertices, ID: fba7d2e5-7d40-43a1-9634-64e9f6b07a31
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-133414759607232 | finalize_polygon() completed
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-133414759607232 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-133414759607232 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-133414759607232 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-133414759607232 | ProfileInterpretationTool.reset() completed
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-133414759607232 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-133414759607232 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-133414759607232 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-133414759607232 | ProfileInterpretationTool.reset() completed
2026-01-08 23:21:00 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-133414759607232 | Failed to create locator for layer layer1: mock error
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-133414759607232 | ProfileInterpretationTool.activate() called
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-133414759607232 | ProfileInterpretationTool activated successfully
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-133414759607232 | ProfileInterpretationTool.deactivate() called
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-133414759607232 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-133414759607232 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-133414759607232 | ProfileInterpretationTool.reset() completed
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-133414759607232 | ProfileInterpretationTool deactivated successfully
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: buffer_dist = 100.5
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:387 | Thread-133414759607232 | Setting saved to project: test_layer = id_123
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:387 | Thread-133414759607232 | Setting saved to project: test_layer_name = RealName
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133414759607232 | Global setting fallback: test_layer = 1.0
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:367 | Thread-133414759607232 | Project setting hit: test_layer_name = RealName
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:424 | Thread-133414759607232 | Restoring layer: test_layer -> RealName
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-133414759607232 | Point 1 added: 0.00, 0.00
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-133414759607232 | Point 2 added: 100.00, 100.00
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-133414759607232 | Point 1 added: 50.00, 50.00
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-133414759607232 | reset() called, finalized=False
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133414759607232 | finalize_measurement called with 1 points
2026-01-08 23:21:00 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-133414759607232 | Cannot finalize measurement with less than 2 points
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133414759607232 | finalize_measurement called with 2 points
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-133414759607232 | Setting finalized = True
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-133414759607232 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-133414759607232 | Switching to pan tool to stop measurement
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-133414759607232 | Pan tool activated - measurement should be frozen
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-133414759607232 | Ignoring click - measurement is finalized
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133414759607232 | finalize_measurement called with 2 points
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-133414759607232 | Setting finalized = True
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-133414759607232 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-133414759607232 | Switching to pan tool to stop measurement
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-133414759607232 | Pan tool activated - measurement should be frozen
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-133414759607232 | reset() called, finalized=False
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-133414759607232 | reset() called, finalized=False
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-133414759607232 | reset() called, finalized=True
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-133414759607232 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-133414759607232 | reset() called, finalized=False
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133414759607232 | finalize_measurement called with 2 points
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-133414759607232 | Setting finalized = True
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-133414759607232 | Measurement finalized: 2 points, 100.00m total distance
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-133414759607232 | Rubber band redrawn with final points only
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-133414759607232 | Switching to pan tool to stop measurement
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-133414759607232 | Pan tool activated - measurement should be frozen
2026-01-08 23:21:00 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-133414759607232 | Failed to create locator for layer layer1: mock error
2026-01-08 23:21:00 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-133414759607232 | Failed to create locator for layer l2: fail
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-133414759607232 | ProfileMeasureTool activated
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-133414759607232 | reset() called, finalized=False
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-133414759607232 | ProfileMeasureTool deactivated
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133414759607232 | create_drillhole_trace_layer called with 1 holes
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-133414759607232 | Adding 1 drillhole trace features to layer
2026-01-08 23:21:00 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-133414759607232 | Failed to create memory layer: Fail
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133414759607232 | create_drillhole_trace_layer called with 0 holes
2026-01-08 23:21:00 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-133414759607232 | No drillhole data provided for trace layer
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133414759607232 | create_drillhole_trace_layer called with 1 holes
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-133414759607232 | Skipping hole H1: insufficient trace points (1)
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-133414759607232 | Adding 0 drillhole trace features to layer
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133414759607232 | create_drillhole_trace_layer called with 1 holes
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133414759607232 | render() called
2026-01-08 23:21:00 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-133414759607232 | No valid layers to render
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133414759607232 | render() called
2026-01-08 23:21:00 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-133414759607232 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133414759607232 | render() called
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133414759607232 | render() called
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133414759607232 | render() called
2026-01-08 23:21:00 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-133414759607232 | No valid layers to render
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133414759607232 | render() called
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133414759607232 | render() called
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-133414759607232 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-133414759607232 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-133414759607232 | Point 1 added: 0.00, 0.00
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-133414759607232 | Point 2 added: 10.00, 10.00
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133414759607232 | finalize_measurement called with 2 points
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-133414759607232 | Setting finalized = True
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-133414759607232 | Measurement finalized: 2 points, 14.14m total distance
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-133414759607232 | Rubber band redrawn with final points only
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-133414759607232 | Switching to pan tool to stop measurement
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-133414759607232 | Pan tool activated - measurement should be frozen
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-133414759607232 | reset() called, finalized=True
2026-01-08 23:21:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-133414759607232 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-133414759607232 | Point 1 added: 0.00, 0.00
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-133414759607232 | Point 2 added: 100.00, 100.00
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133414759607232 | CacheService initialized (Default TTL: 3600s)
2026-01-08 23:21:00 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-133414759607232 | ProfileController initialized
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-139052318858176 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-139052318858176 | Global setting fallback: buffer_dist = 100.5
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:387 | Thread-139052318858176 | Setting saved to project: test_layer = id_123
2026-01-09 14:19:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:387 | Thread-139052318858176 | Setting saved to project: test_layer_name = RealName
2026-01-09 14:19:50 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:50 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:50 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:50 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:50 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:50 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:50 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:50 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:50 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:50 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:50 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:50 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:50 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:50 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:50 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:50 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:50 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:50 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:50 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:50 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:51 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:51 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:51 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:51 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:51 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:51 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:51 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:51 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:51 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:51 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:51 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:51 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:51 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:51 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-139406994242496 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:19:51 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139406994242496 | Global setting fallback: buffer_dist = 100.5
2026-01-09 14:19:51 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-139406994242496 | Persistent interpretations cleared by reset
2026-01-09 14:19:51 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-139406994242496 | Setting saved to project: test_layer = id_123
2026-01-09 14:19:51 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-139406994242496 | Setting saved to project: test_layer_name = RealName
2026-01-09 14:21:38 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:135 | Thread-134851914709952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:21:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-134851914709952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:21:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-134851914709952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:21:38 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-134851914709952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:21:38 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-134851914709952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:21:38 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:135 | Thread-134851914709952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:21:39 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-134851914709952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:21:39 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:135 | Thread-134851914709952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:21:40 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-134851914709952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:21:40 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-134851914709952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:21:40 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-134851914709952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 14:21:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-134851914709952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:26 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:26 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:26 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:26 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:26 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:26 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:26 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:26 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:26 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:26 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:26 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:26 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:26 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:26 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:26 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:26 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:26 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:26 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:26 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:26 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:26 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:26 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:26 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:26 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:26 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:26 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:27 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:27 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:27 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:27 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:27 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:14:27 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-123815334259648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-133163651279808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-136502704704448 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136502704704448 | Global setting fallback: buffer_dist = 100.5
2026-01-09 16:15:17 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-136502704704448 | Persistent interpretations cleared by reset
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-136502704704448 | Setting saved to project: test_layer = id_123
2026-01-09 16:15:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-136502704704448 | Setting saved to project: test_layer_name = RealName
2026-01-09 16:16:49 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:135 | Thread-138641648823232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:16:49 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-138641648823232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:16:49 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-138641648823232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:16:49 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-138641648823232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:16:49 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-138641648823232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:16:49 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:135 | Thread-138641648823232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:16:50 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-138641648823232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:16:50 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:135 | Thread-138641648823232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:16:51 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-138641648823232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:16:51 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-138641648823232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:16:51 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-138641648823232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:16:51 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-138641648823232 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:27:15 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-124155873381312 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-136862803446720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:20 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-124112451963840 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:28:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-131638833720256 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-135123711843264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135123711843264 | Global setting fallback: section_layer = 1.0
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135123711843264 | Global setting fallback: section_layer_name = 1.0
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-135123711843264 | Failed to restore layer for section_layer
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135123711843264 | Global setting fallback: buffer_dist = 1.0
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135123711843264 | Global setting fallback: dem_layer = 1.0
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135123711843264 | Global setting fallback: dem_layer_name = 1.0
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-135123711843264 | Failed to restore layer for dem_layer
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135123711843264 | Global setting fallback: dem_band = 1.0
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135123711843264 | Global setting fallback: scale = 1.0
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135123711843264 | Global setting fallback: vert_exag = 1.0
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135123711843264 | Global setting fallback: geol_layer = 1.0
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135123711843264 | Global setting fallback: geol_layer_name = 1.0
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-135123711843264 | Failed to restore layer for geol_layer
2026-01-09 16:31:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135123711843264 | Global setting fallback: geol_field = 1.0
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:31:40 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-133215780051904 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:01 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-127672088726464 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:21 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-140538564959168 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-139407024397248 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:32:50 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:345 | Thread-139407024397248 | Inherited attributes from drillhole: DrillholeUnit
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-123415536135104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:33:40 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:353 | Thread-123415536135104 | Inherited attributes from geology: GeologyUnit
2026-01-09 16:34:58 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:135 | Thread-130800557677504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:34:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-130800557677504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:34:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-130800557677504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:34:58 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-130800557677504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:34:58 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-130800557677504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:34:58 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:135 | Thread-130800557677504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:34:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-130800557677504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:34:59 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:135 | Thread-130800557677504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:34:59 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-130800557677504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:34:59 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-130800557677504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:34:59 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-130800557677504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:34:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-130800557677504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-127413788879808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:00 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:355 | Thread-127413788879808 | Inherited attributes from geology: GeologyUnit
2026-01-09 16:37:28 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:135 | Thread-130649093475264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-130649093475264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-130649093475264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:28 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-130649093475264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:28 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-130649093475264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:28 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:135 | Thread-130649093475264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-130649093475264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:29 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:135 | Thread-130649093475264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:30 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-130649093475264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:30 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-130649093475264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:30 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-130649093475264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:37:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-130649093475264 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:41:13 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:135 | Thread-123293335473088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:41:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-123293335473088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:41:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-123293335473088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:41:13 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-123293335473088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:41:13 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-123293335473088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:41:13 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:135 | Thread-123293335473088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:41:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-123293335473088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:41:14 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:135 | Thread-123293335473088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:41:14 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-123293335473088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:41:14 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-123293335473088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:41:14 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-123293335473088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:41:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-123293335473088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-135577499835328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:24 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:363 | Thread-135577499835328 | Inherited attributes from geology: GeologyUnit
2026-01-09 16:44:46 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:135 | Thread-137577411627968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-137577411627968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-137577411627968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:46 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-137577411627968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:46 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-137577411627968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:46 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:135 | Thread-137577411627968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-137577411627968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:47 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:135 | Thread-137577411627968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:47 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-137577411627968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:47 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-137577411627968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:47 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-137577411627968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:44:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-137577411627968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:52:17 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:135 | Thread-135268569283520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:52:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-135268569283520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:52:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-135268569283520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:52:17 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-135268569283520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:52:17 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-135268569283520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:52:17 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:135 | Thread-135268569283520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:52:18 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-135268569283520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:52:18 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:135 | Thread-135268569283520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:52:18 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-135268569283520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:52:18 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-135268569283520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:52:18 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-135268569283520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 16:52:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-135268569283520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 17:06:47 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:135 | Thread-132347385543616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 17:06:47 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-132347385543616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 17:06:47 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-132347385543616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 17:06:47 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-132347385543616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 17:06:47 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-132347385543616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 17:06:47 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:135 | Thread-132347385543616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 17:06:48 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-132347385543616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 17:06:48 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:135 | Thread-132347385543616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 17:06:49 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-132347385543616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 17:06:49 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-132347385543616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 17:06:49 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-132347385543616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 17:06:49 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-132347385543616 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-129798550416320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:562 | Thread-129798550416320 | Loaded 0 interpretations from project
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-129798550416320 | GeologyGenerationTask started (Background Thread)
2026-01-09 20:09:39 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-129798550416320 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-129798550416320 | GeologyGenerationTask started (Background Thread)
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-129798550416320 | GeologyGenerationTask finished with 1 segments
2026-01-09 20:09:39 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-129798550416320 | Test Title: Test Message
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-129798550416320 | Test Title: Test Message
2026-01-09 20:09:39 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-129798550416320 | Test Title: Test Message
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-129798550416320 | CRITICAL_OP: finalize_polygon | points=2
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-129798550416320 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-09 20:09:39 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-129798550416320 | finalize_polygon() aborted - less than 3 points
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-129798550416320 | CRITICAL_OP: finalize_polygon | points=3
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-129798550416320 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-129798550416320 | finalize_polygon() - emitting polygonFinished signal for c18fa650-9533-45e4-9bfa-7c218578f5b2
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-129798550416320 | Interpretation polygon finalized with 3 vertices, ID: c18fa650-9533-45e4-9bfa-7c218578f5b2
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-129798550416320 | finalize_polygon() completed
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-129798550416320 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-129798550416320 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-129798550416320 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-129798550416320 | ProfileInterpretationTool.reset() completed
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-129798550416320 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-129798550416320 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-129798550416320 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-129798550416320 | ProfileInterpretationTool.reset() completed
2026-01-09 20:09:39 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-129798550416320 | Failed to create locator for layer layer1: mock error
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-129798550416320 | ProfileInterpretationTool.activate() called
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-129798550416320 | ProfileInterpretationTool activated successfully
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-129798550416320 | ProfileInterpretationTool.deactivate() called
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-129798550416320 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-129798550416320 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-129798550416320 | ProfileInterpretationTool.reset() completed
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-129798550416320 | ProfileInterpretationTool deactivated successfully
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-129798550416320 | Global setting fallback: buffer_dist = 100.5
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-129798550416320 | Persistent interpretations cleared by reset
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-129798550416320 | Setting saved to project: test_layer = id_123
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-129798550416320 | Setting saved to project: test_layer_name = RealName
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-129798550416320 | Global setting fallback: test_layer = 1.0
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-129798550416320 | Project setting hit: test_layer_name = RealName
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-129798550416320 | Restoring layer: test_layer -> RealName
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-129798550416320 | Point 1 added: 0.00, 0.00
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-129798550416320 | Point 2 added: 100.00, 100.00
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-129798550416320 | Point 1 added: 50.00, 50.00
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-129798550416320 | reset() called, finalized=False
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-129798550416320 | finalize_measurement called with 1 points
2026-01-09 20:09:39 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-129798550416320 | Cannot finalize measurement with less than 2 points
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-129798550416320 | finalize_measurement called with 2 points
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-129798550416320 | Setting finalized = True
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-129798550416320 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-129798550416320 | Switching to pan tool to stop measurement
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-129798550416320 | Pan tool activated - measurement should be frozen
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-129798550416320 | Ignoring click - measurement is finalized
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-129798550416320 | finalize_measurement called with 2 points
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-129798550416320 | Setting finalized = True
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-129798550416320 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-129798550416320 | Switching to pan tool to stop measurement
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-129798550416320 | Pan tool activated - measurement should be frozen
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-129798550416320 | reset() called, finalized=False
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-129798550416320 | reset() called, finalized=False
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-129798550416320 | reset() called, finalized=True
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-129798550416320 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-129798550416320 | reset() called, finalized=False
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-129798550416320 | finalize_measurement called with 2 points
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-129798550416320 | Setting finalized = True
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-129798550416320 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-129798550416320 | Rubber band redrawn with final points only
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-129798550416320 | Switching to pan tool to stop measurement
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-129798550416320 | Pan tool activated - measurement should be frozen
2026-01-09 20:09:39 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-129798550416320 | Failed to create locator for layer layer1: mock error
2026-01-09 20:09:39 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-129798550416320 | Failed to create locator for layer l2: fail
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-129798550416320 | ProfileMeasureTool activated
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-129798550416320 | reset() called, finalized=False
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-129798550416320 | ProfileMeasureTool deactivated
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129798550416320 | create_drillhole_trace_layer called with 1 holes
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-129798550416320 | Adding 1 drillhole trace features to layer
2026-01-09 20:09:39 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-129798550416320 | Failed to create memory layer: Fail
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129798550416320 | create_drillhole_trace_layer called with 0 holes
2026-01-09 20:09:39 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-129798550416320 | No drillhole data provided for trace layer
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129798550416320 | create_drillhole_trace_layer called with 1 holes
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-129798550416320 | Skipping hole H1: insufficient trace points (1)
2026-01-09 20:09:39 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-129798550416320 | Adding 0 drillhole trace features to layer
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129798550416320 | create_drillhole_trace_layer called with 1 holes
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129798550416320 | render() called
2026-01-09 20:09:39 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-129798550416320 | No valid layers to render
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129798550416320 | render() called
2026-01-09 20:09:39 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-129798550416320 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129798550416320 | render() called
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129798550416320 | render() called
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129798550416320 | render() called
2026-01-09 20:09:39 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-129798550416320 | No valid layers to render
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129798550416320 | render() called
2026-01-09 20:09:39 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129798550416320 | render() called
2026-01-09 20:10:40 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:40 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:40 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:40 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:40 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:40 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:40 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:40 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:40 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:40 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:40 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:40 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:40 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:40 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:40 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:40 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:40 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:40 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:40 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:40 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:40 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-133733826567104 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:562 | Thread-133733826567104 | Loaded 0 interpretations from project
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-133733826567104 | GeologyGenerationTask started (Background Thread)
2026-01-09 20:10:41 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-133733826567104 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-133733826567104 | GeologyGenerationTask started (Background Thread)
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-133733826567104 | GeologyGenerationTask finished with 1 segments
2026-01-09 20:10:41 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-133733826567104 | Test Title: Test Message
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-133733826567104 | Test Title: Test Message
2026-01-09 20:10:41 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-133733826567104 | Test Title: Test Message
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-133733826567104 | CRITICAL_OP: finalize_polygon | points=2
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-133733826567104 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-09 20:10:41 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-133733826567104 | finalize_polygon() aborted - less than 3 points
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-133733826567104 | CRITICAL_OP: finalize_polygon | points=3
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-133733826567104 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-133733826567104 | finalize_polygon() - emitting polygonFinished signal for 78987c40-72a4-4575-a162-41a9ced2f213
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-133733826567104 | Interpretation polygon finalized with 3 vertices, ID: 78987c40-72a4-4575-a162-41a9ced2f213
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-133733826567104 | finalize_polygon() completed
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-133733826567104 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-133733826567104 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-133733826567104 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-133733826567104 | ProfileInterpretationTool.reset() completed
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-133733826567104 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-133733826567104 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-133733826567104 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-133733826567104 | ProfileInterpretationTool.reset() completed
2026-01-09 20:10:41 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-133733826567104 | Failed to create locator for layer layer1: mock error
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-133733826567104 | ProfileInterpretationTool.activate() called
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-133733826567104 | ProfileInterpretationTool activated successfully
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-133733826567104 | ProfileInterpretationTool.deactivate() called
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-133733826567104 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-133733826567104 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-133733826567104 | ProfileInterpretationTool.reset() completed
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-133733826567104 | ProfileInterpretationTool deactivated successfully
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133733826567104 | Global setting fallback: buffer_dist = 100.5
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-133733826567104 | Persistent interpretations cleared by reset
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-133733826567104 | Setting saved to project: test_layer = id_123
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-133733826567104 | Setting saved to project: test_layer_name = RealName
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133733826567104 | Global setting fallback: test_layer = 1.0
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133733826567104 | Project setting hit: test_layer_name = RealName
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-133733826567104 | Restoring layer: test_layer -> RealName
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-133733826567104 | Point 1 added: 0.00, 0.00
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-133733826567104 | Point 2 added: 100.00, 100.00
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-133733826567104 | Point 1 added: 50.00, 50.00
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-133733826567104 | reset() called, finalized=False
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133733826567104 | finalize_measurement called with 1 points
2026-01-09 20:10:41 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-133733826567104 | Cannot finalize measurement with less than 2 points
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133733826567104 | finalize_measurement called with 2 points
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-133733826567104 | Setting finalized = True
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-133733826567104 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-133733826567104 | Switching to pan tool to stop measurement
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-133733826567104 | Pan tool activated - measurement should be frozen
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-133733826567104 | Ignoring click - measurement is finalized
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133733826567104 | finalize_measurement called with 2 points
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-133733826567104 | Setting finalized = True
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-133733826567104 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-133733826567104 | Switching to pan tool to stop measurement
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-133733826567104 | Pan tool activated - measurement should be frozen
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-133733826567104 | reset() called, finalized=False
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-133733826567104 | reset() called, finalized=False
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-133733826567104 | reset() called, finalized=True
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-133733826567104 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-133733826567104 | reset() called, finalized=False
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133733826567104 | finalize_measurement called with 2 points
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-133733826567104 | Setting finalized = True
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-133733826567104 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-133733826567104 | Rubber band redrawn with final points only
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-133733826567104 | Switching to pan tool to stop measurement
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-133733826567104 | Pan tool activated - measurement should be frozen
2026-01-09 20:10:41 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-133733826567104 | Failed to create locator for layer layer1: mock error
2026-01-09 20:10:41 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-133733826567104 | Failed to create locator for layer l2: fail
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-133733826567104 | ProfileMeasureTool activated
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-133733826567104 | reset() called, finalized=False
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-133733826567104 | ProfileMeasureTool deactivated
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133733826567104 | create_drillhole_trace_layer called with 1 holes
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-133733826567104 | Adding 1 drillhole trace features to layer
2026-01-09 20:10:41 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-133733826567104 | Failed to create memory layer: Fail
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133733826567104 | create_drillhole_trace_layer called with 0 holes
2026-01-09 20:10:41 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-133733826567104 | No drillhole data provided for trace layer
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133733826567104 | create_drillhole_trace_layer called with 1 holes
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-133733826567104 | Skipping hole H1: insufficient trace points (1)
2026-01-09 20:10:41 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-133733826567104 | Adding 0 drillhole trace features to layer
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133733826567104 | create_drillhole_trace_layer called with 1 holes
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133733826567104 | render() called
2026-01-09 20:10:41 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-133733826567104 | No valid layers to render
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133733826567104 | render() called
2026-01-09 20:10:41 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-133733826567104 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133733826567104 | render() called
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133733826567104 | render() called
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133733826567104 | render() called
2026-01-09 20:10:41 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-133733826567104 | No valid layers to render
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133733826567104 | render() called
2026-01-09 20:10:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133733826567104 | render() called
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:03 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-139259489496000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:562 | Thread-139259489496000 | Loaded 0 interpretations from project
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:366 | Thread-139259489496000 | Inherited attributes from geology: GeologyUnit
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-139259489496000 | GeologyGenerationTask started (Background Thread)
2026-01-09 20:11:04 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-139259489496000 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-139259489496000 | GeologyGenerationTask started (Background Thread)
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-139259489496000 | GeologyGenerationTask finished with 1 segments
2026-01-09 20:11:04 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-139259489496000 | Test Title: Test Message
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-139259489496000 | Test Title: Test Message
2026-01-09 20:11:04 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-139259489496000 | Test Title: Test Message
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-139259489496000 | CRITICAL_OP: finalize_polygon | points=2
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-139259489496000 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-09 20:11:04 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-139259489496000 | finalize_polygon() aborted - less than 3 points
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-139259489496000 | CRITICAL_OP: finalize_polygon | points=3
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-139259489496000 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-139259489496000 | finalize_polygon() - emitting polygonFinished signal for 455548f3-d5de-4343-8fa7-5649c8b470b6
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-139259489496000 | Interpretation polygon finalized with 3 vertices, ID: 455548f3-d5de-4343-8fa7-5649c8b470b6
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-139259489496000 | finalize_polygon() completed
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-139259489496000 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-139259489496000 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-139259489496000 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-139259489496000 | ProfileInterpretationTool.reset() completed
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-139259489496000 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-139259489496000 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-139259489496000 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-139259489496000 | ProfileInterpretationTool.reset() completed
2026-01-09 20:11:04 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-139259489496000 | Failed to create locator for layer layer1: mock error
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-139259489496000 | ProfileInterpretationTool.activate() called
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-139259489496000 | ProfileInterpretationTool activated successfully
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-139259489496000 | ProfileInterpretationTool.deactivate() called
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-139259489496000 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-139259489496000 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-139259489496000 | ProfileInterpretationTool.reset() completed
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-139259489496000 | ProfileInterpretationTool deactivated successfully
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139259489496000 | Global setting fallback: buffer_dist = 100.5
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-139259489496000 | Persistent interpretations cleared by reset
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-139259489496000 | Setting saved to project: test_layer = id_123
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-139259489496000 | Setting saved to project: test_layer_name = RealName
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139259489496000 | Global setting fallback: test_layer = 1.0
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-139259489496000 | Project setting hit: test_layer_name = RealName
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-139259489496000 | Restoring layer: test_layer -> RealName
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-139259489496000 | Point 1 added: 0.00, 0.00
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-139259489496000 | Point 2 added: 100.00, 100.00
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-139259489496000 | Point 1 added: 50.00, 50.00
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-139259489496000 | reset() called, finalized=False
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-139259489496000 | finalize_measurement called with 1 points
2026-01-09 20:11:04 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-139259489496000 | Cannot finalize measurement with less than 2 points
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-139259489496000 | finalize_measurement called with 2 points
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-139259489496000 | Setting finalized = True
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-139259489496000 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-139259489496000 | Switching to pan tool to stop measurement
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-139259489496000 | Pan tool activated - measurement should be frozen
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-139259489496000 | Ignoring click - measurement is finalized
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-139259489496000 | finalize_measurement called with 2 points
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-139259489496000 | Setting finalized = True
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-139259489496000 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-139259489496000 | Switching to pan tool to stop measurement
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-139259489496000 | Pan tool activated - measurement should be frozen
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-139259489496000 | reset() called, finalized=False
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-139259489496000 | reset() called, finalized=False
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-139259489496000 | reset() called, finalized=True
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-139259489496000 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-139259489496000 | reset() called, finalized=False
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-139259489496000 | finalize_measurement called with 2 points
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-139259489496000 | Setting finalized = True
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-139259489496000 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-139259489496000 | Rubber band redrawn with final points only
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-139259489496000 | Switching to pan tool to stop measurement
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-139259489496000 | Pan tool activated - measurement should be frozen
2026-01-09 20:11:04 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-139259489496000 | Failed to create locator for layer layer1: mock error
2026-01-09 20:11:04 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-139259489496000 | Failed to create locator for layer l2: fail
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-139259489496000 | ProfileMeasureTool activated
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-139259489496000 | reset() called, finalized=False
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-139259489496000 | ProfileMeasureTool deactivated
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139259489496000 | create_drillhole_trace_layer called with 1 holes
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-139259489496000 | Adding 1 drillhole trace features to layer
2026-01-09 20:11:04 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-139259489496000 | Failed to create memory layer: Fail
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139259489496000 | create_drillhole_trace_layer called with 0 holes
2026-01-09 20:11:04 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-139259489496000 | No drillhole data provided for trace layer
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139259489496000 | create_drillhole_trace_layer called with 1 holes
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-139259489496000 | Skipping hole H1: insufficient trace points (1)
2026-01-09 20:11:04 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-139259489496000 | Adding 0 drillhole trace features to layer
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139259489496000 | create_drillhole_trace_layer called with 1 holes
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139259489496000 | render() called
2026-01-09 20:11:04 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-139259489496000 | No valid layers to render
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139259489496000 | render() called
2026-01-09 20:11:04 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-139259489496000 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139259489496000 | render() called
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139259489496000 | render() called
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139259489496000 | render() called
2026-01-09 20:11:04 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-139259489496000 | No valid layers to render
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139259489496000 | render() called
2026-01-09 20:11:04 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139259489496000 | render() called
2026-01-09 20:12:53 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:135 | Thread-135133530123200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:12:53 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-135133530123200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:12:53 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-135133530123200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:12:53 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-135133530123200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:12:53 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-135133530123200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:12:53 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:135 | Thread-135133530123200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:12:54 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-135133530123200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:12:54 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:135 | Thread-135133530123200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:12:55 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-135133530123200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:12:55 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-135133530123200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:12:55 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-135133530123200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:12:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-135133530123200 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:135 | Thread-138901993192384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138901993192384 | Config set: SecInterp/scale = 50000.0
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138901993192384 | Config set: SecInterp/vert_exag = 1.0
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138901993192384 | Config set: SecInterp/buffer_dist = 100.0
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138901993192384 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138901993192384 | Config set: SecInterp/last_output_dir = 
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138901993192384 | Config set: SecInterp/dpi = 300
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138901993192384 | Config set: SecInterp/preview_width = 800
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138901993192384 | Config set: SecInterp/preview_height = 600
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138901993192384 | Config set: SecInterp/sampling_interval = 10.0
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138901993192384 | Config set: SecInterp/export_quality = 95
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138901993192384 | Config set: SecInterp/auto_lod = True
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138901993192384 | Config set: SecInterp/max_preview_points = 10000
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-138901993192384 | Configuration reset to defaults
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138901993192384 | Config set: SecInterp/scale = 200.0
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138901993192384 | CacheService initialized (Default TTL: 3600s)
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138901993192384 | CacheService initialized (Default TTL: 3600s)
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138901993192384 | CacheService initialized (Default TTL: 3600s)
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-138901993192384 | Projecting collars from Test Layer with buffer 50.0m
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-138901993192384 | No collars found within buffer area.
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-138901993192384 | Projecting collars from Test Layer with buffer 50.0m
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-138901993192384 | DrillholeService.project_collars END: Found 1 collars.
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-138901993192384 | ✓ Saving profile axes...
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-138901993192384 | ✓ Saving topographic profile...
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-138901993192384 | ✓ Saving profile axes...
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-138901993192384 | ✓ Saving interpretation data...
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:253 | Thread-138901993192384 | 3D Export features are restricted for this user.
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-138901993192384 | ✓ Saving topographic profile...
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-138901993192384 | ✓ Saving profile axes...
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-138901993192384 | ✓ Saving interpretation data...
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:236 | Thread-138901993192384 | ✓ Saving 3D interpretation data...
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-138901993192384 | ✓ Saving topographic profile...
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-138901993192384 | ✓ Saving profile axes...
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:134 | Thread-138901993192384 | ✓ Saving geological profile...
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:162 | Thread-138901993192384 | ✓ Saving structural profile...
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:198 | Thread-138901993192384 | ✓ Saving drillhole data...
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-138901993192384 | ✓ Saving interpretation data...
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-138901993192384 | Access denied for restricted feature: 3D Export
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:253 | Thread-138901993192384 | 3D Export features are restricted for this user.
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-138901993192384 | ✓ Saving topographic profile...
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-138901993192384 | ✓ Saving profile axes...
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:220 | Thread-138901993192384 | No interpretations provided for export.
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:198 | Thread-138901993192384 | ✓ Saving drillhole data...
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:134 | Thread-138901993192384 | ✓ Saving geological profile...
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-138901993192384 | ✓ Saving interpretation data...
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:236 | Thread-138901993192384 | ✓ Saving 3D interpretation data...
2026-01-09 20:45:26 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:251 | Thread-138901993192384 | Invalid section line layer, skipping 3D export.
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-138901993192384 | ✓ Saving interpretation data...
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:162 | Thread-138901993192384 | ✓ Saving structural profile...
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-138901993192384 | ✓ Saving topographic profile...
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-138901993192384 | Generating master profile with interval=10.00
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-138901993192384 | Generating master profile with interval=50.00
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-138901993192384 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-138901993192384 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-138901993192384 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-138901993192384 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-138901993192384 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-138901993192384 | Running geometry operation: test
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-138901993192384 | Generated 1 drillhole traces
2026-01-09 20:45:26 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-138901993192384 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-09 20:45:26 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-138901993192384 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-138901993192384 | Generated 1 drillhole traces
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-138901993192384 | Drillhole preview skipped: No Collar ID field selected.
2026-01-09 20:45:26 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-138901993192384 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 20:45:26 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-138901993192384 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 20:45:26 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-138901993192384 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 20:45:26 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-138901993192384 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 20:45:26 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-138901993192384 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-138901993192384 | Analyzing structures in Structure Layer with buffer 10m
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-138901993192384 | Processed 1 structural measurements from Structure Layer
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-138901993192384 | Successfully exported to /tmp/test_dynamic.shp
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-138901993192384 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-138901993192384 | Generated QML style: /tmp/test.qml
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-138901993192384 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-138901993192384 | Generated QML style: dummy.qml
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-138901993192384 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-138901993192384 | Generated QML style: dummy.qml
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-138901993192384 | Loaded 0 interpretations from project
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:365 | Thread-138901993192384 | Inherited attributes from geology: GeologyUnit
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-138901993192384 | GeologyGenerationTask started (Background Thread)
2026-01-09 20:45:26 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-138901993192384 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-138901993192384 | GeologyGenerationTask started (Background Thread)
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-138901993192384 | GeologyGenerationTask finished with 1 segments
2026-01-09 20:45:26 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-138901993192384 | Test Title: Test Message
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-138901993192384 | Test Title: Test Message
2026-01-09 20:45:26 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-138901993192384 | Test Title: Test Message
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-138901993192384 | CRITICAL_OP: finalize_polygon | points=2
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-138901993192384 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-09 20:45:26 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-138901993192384 | finalize_polygon() aborted - less than 3 points
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-138901993192384 | CRITICAL_OP: finalize_polygon | points=3
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-138901993192384 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-138901993192384 | finalize_polygon() - emitting polygonFinished signal for ec328a68-4604-42a9-bcbb-b8120b4024db
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-138901993192384 | Interpretation polygon finalized with 3 vertices, ID: ec328a68-4604-42a9-bcbb-b8120b4024db
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-138901993192384 | finalize_polygon() completed
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-138901993192384 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-138901993192384 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-138901993192384 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-138901993192384 | ProfileInterpretationTool.reset() completed
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-138901993192384 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-138901993192384 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-138901993192384 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-138901993192384 | ProfileInterpretationTool.reset() completed
2026-01-09 20:45:26 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-138901993192384 | Failed to create locator for layer layer1: mock error
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-138901993192384 | ProfileInterpretationTool.activate() called
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-138901993192384 | ProfileInterpretationTool activated successfully
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-138901993192384 | ProfileInterpretationTool.deactivate() called
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-138901993192384 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-138901993192384 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-138901993192384 | ProfileInterpretationTool.reset() completed
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-138901993192384 | ProfileInterpretationTool deactivated successfully
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138901993192384 | Global setting fallback: buffer_dist = 100.5
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-138901993192384 | Persistent interpretations cleared by reset
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-138901993192384 | Setting saved to project: test_layer = id_123
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-138901993192384 | Setting saved to project: test_layer_name = RealName
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138901993192384 | Global setting fallback: test_layer = 1.0
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-138901993192384 | Project setting hit: test_layer_name = RealName
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-138901993192384 | Restoring layer: test_layer -> RealName
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-138901993192384 | Point 1 added: 0.00, 0.00
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-138901993192384 | Point 2 added: 100.00, 100.00
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-138901993192384 | Point 1 added: 50.00, 50.00
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138901993192384 | reset() called, finalized=False
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-138901993192384 | finalize_measurement called with 1 points
2026-01-09 20:45:26 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-138901993192384 | Cannot finalize measurement with less than 2 points
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-138901993192384 | finalize_measurement called with 2 points
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-138901993192384 | Setting finalized = True
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-138901993192384 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-138901993192384 | Switching to pan tool to stop measurement
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-138901993192384 | Pan tool activated - measurement should be frozen
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-138901993192384 | Ignoring click - measurement is finalized
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-138901993192384 | finalize_measurement called with 2 points
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-138901993192384 | Setting finalized = True
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-138901993192384 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-138901993192384 | Switching to pan tool to stop measurement
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-138901993192384 | Pan tool activated - measurement should be frozen
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138901993192384 | reset() called, finalized=False
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138901993192384 | reset() called, finalized=False
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138901993192384 | reset() called, finalized=True
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-138901993192384 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138901993192384 | reset() called, finalized=False
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-138901993192384 | finalize_measurement called with 2 points
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-138901993192384 | Setting finalized = True
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-138901993192384 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-138901993192384 | Rubber band redrawn with final points only
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-138901993192384 | Switching to pan tool to stop measurement
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-138901993192384 | Pan tool activated - measurement should be frozen
2026-01-09 20:45:26 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-138901993192384 | Failed to create locator for layer layer1: mock error
2026-01-09 20:45:26 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-138901993192384 | Failed to create locator for layer l2: fail
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-138901993192384 | ProfileMeasureTool activated
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138901993192384 | reset() called, finalized=False
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-138901993192384 | ProfileMeasureTool deactivated
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138901993192384 | create_drillhole_trace_layer called with 1 holes
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-138901993192384 | Adding 1 drillhole trace features to layer
2026-01-09 20:45:26 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-138901993192384 | Failed to create memory layer: Fail
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138901993192384 | create_drillhole_trace_layer called with 0 holes
2026-01-09 20:45:26 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-138901993192384 | No drillhole data provided for trace layer
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138901993192384 | create_drillhole_trace_layer called with 1 holes
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-138901993192384 | Skipping hole H1: insufficient trace points (1)
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-138901993192384 | Adding 0 drillhole trace features to layer
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138901993192384 | create_drillhole_trace_layer called with 1 holes
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138901993192384 | render() called
2026-01-09 20:45:26 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-138901993192384 | No valid layers to render
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138901993192384 | render() called
2026-01-09 20:45:26 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-138901993192384 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138901993192384 | render() called
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138901993192384 | render() called
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138901993192384 | render() called
2026-01-09 20:45:26 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-138901993192384 | No valid layers to render
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138901993192384 | render() called
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138901993192384 | render() called
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-138901993192384 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-138901993192384 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138901993192384 | CacheService initialized (Default TTL: 3600s)
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-138901993192384 | ProfileController initialized
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138901993192384 | CacheService initialized (Default TTL: 3600s)
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-138901993192384 | ProfileController initialized
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138901993192384 | CacheService initialized (Default TTL: 3600s)
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-138901993192384 | ProfileController initialized
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-138901993192384 | Point 1 added: 0.00, 0.00
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-138901993192384 | Point 2 added: 10.00, 10.00
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-138901993192384 | finalize_measurement called with 2 points
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-138901993192384 | Setting finalized = True
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-138901993192384 | Measurement finalized: 2 points, 14.14m total distance
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-138901993192384 | Rubber band redrawn with final points only
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-138901993192384 | Switching to pan tool to stop measurement
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-138901993192384 | Pan tool activated - measurement should be frozen
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138901993192384 | reset() called, finalized=True
2026-01-09 20:45:26 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-138901993192384 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-138901993192384 | Point 1 added: 0.00, 0.00
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-138901993192384 | Point 2 added: 100.00, 100.00
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138901993192384 | CacheService initialized (Default TTL: 3600s)
2026-01-09 20:45:26 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-138901993192384 | ProfileController initialized
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:135 | Thread-137962296122304 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-137962296122304 | Config set: SecInterp/scale = 50000.0
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-137962296122304 | Config set: SecInterp/vert_exag = 1.0
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-137962296122304 | Config set: SecInterp/buffer_dist = 100.0
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-137962296122304 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-137962296122304 | Config set: SecInterp/last_output_dir = 
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-137962296122304 | Config set: SecInterp/dpi = 300
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-137962296122304 | Config set: SecInterp/preview_width = 800
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-137962296122304 | Config set: SecInterp/preview_height = 600
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-137962296122304 | Config set: SecInterp/sampling_interval = 10.0
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-137962296122304 | Config set: SecInterp/export_quality = 95
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-137962296122304 | Config set: SecInterp/auto_lod = True
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-137962296122304 | Config set: SecInterp/max_preview_points = 10000
2026-01-09 20:54:03 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-137962296122304 | Configuration reset to defaults
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-137962296122304 | Config set: SecInterp/scale = 200.0
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-137962296122304 | CacheService initialized (Default TTL: 3600s)
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-137962296122304 | CacheService initialized (Default TTL: 3600s)
2026-01-09 20:54:03 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-137962296122304 | CacheService initialized (Default TTL: 3600s)
2026-01-09 20:54:03 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-137962296122304 | Projecting collars from Test Layer with buffer 50.0m
2026-01-09 20:54:03 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-137962296122304 | No collars found within buffer area.
2026-01-09 20:54:03 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-137962296122304 | Projecting collars from Test Layer with buffer 50.0m
2026-01-09 20:54:03 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-137962296122304 | DrillholeService.project_collars END: Found 1 collars.
2026-01-09 20:54:03 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-137962296122304 | ✓ Saving profile axes...
2026-01-09 20:54:03 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-137962296122304 | ✓ Saving topographic profile...
2026-01-09 20:54:03 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-137962296122304 | ✓ Saving profile axes...
2026-01-09 20:54:03 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-137962296122304 | ✓ Saving interpretation data...
2026-01-09 20:54:03 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:253 | Thread-137962296122304 | 3D Export features are restricted for this user.
2026-01-09 20:54:03 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-137962296122304 | ✓ Saving topographic profile...
2026-01-09 20:54:03 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-137962296122304 | ✓ Saving profile axes...
2026-01-09 20:54:03 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-137962296122304 | ✓ Saving interpretation data...
2026-01-09 20:54:03 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:236 | Thread-137962296122304 | ✓ Saving 3D interpretation data...
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-137962296122304 | ✓ Saving topographic profile...
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-137962296122304 | ✓ Saving profile axes...
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:134 | Thread-137962296122304 | ✓ Saving geological profile...
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:162 | Thread-137962296122304 | ✓ Saving structural profile...
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:198 | Thread-137962296122304 | ✓ Saving drillhole data...
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-137962296122304 | ✓ Saving interpretation data...
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-137962296122304 | Access denied for restricted feature: 3D Export
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:253 | Thread-137962296122304 | 3D Export features are restricted for this user.
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-137962296122304 | ✓ Saving topographic profile...
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-137962296122304 | ✓ Saving profile axes...
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:220 | Thread-137962296122304 | No interpretations provided for export.
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:198 | Thread-137962296122304 | ✓ Saving drillhole data...
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:134 | Thread-137962296122304 | ✓ Saving geological profile...
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-137962296122304 | ✓ Saving interpretation data...
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:236 | Thread-137962296122304 | ✓ Saving 3D interpretation data...
2026-01-09 20:54:04 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:251 | Thread-137962296122304 | Invalid section line layer, skipping 3D export.
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-137962296122304 | ✓ Saving interpretation data...
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:162 | Thread-137962296122304 | ✓ Saving structural profile...
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-137962296122304 | ✓ Saving topographic profile...
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-137962296122304 | Generating master profile with interval=10.00
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-137962296122304 | Generating master profile with interval=50.00
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-137962296122304 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-137962296122304 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-137962296122304 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-137962296122304 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-137962296122304 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-137962296122304 | Running geometry operation: test
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-137962296122304 | Generated 1 drillhole traces
2026-01-09 20:54:04 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-137962296122304 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-09 20:54:04 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-137962296122304 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-137962296122304 | Generated 1 drillhole traces
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-137962296122304 | Drillhole preview skipped: No Collar ID field selected.
2026-01-09 20:54:04 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-137962296122304 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 20:54:04 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-137962296122304 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 20:54:04 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-137962296122304 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 20:54:04 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-137962296122304 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 20:54:04 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-137962296122304 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-137962296122304 | Analyzing structures in Structure Layer with buffer 10m
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-137962296122304 | Processed 1 structural measurements from Structure Layer
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-137962296122304 | Successfully exported to /tmp/test_dynamic.shp
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-137962296122304 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-137962296122304 | Generated QML style: /tmp/test.qml
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-137962296122304 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-137962296122304 | Generated QML style: dummy.qml
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-137962296122304 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-137962296122304 | Generated QML style: dummy.qml
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-137962296122304 | Loaded 0 interpretations from project
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:365 | Thread-137962296122304 | Inherited attributes from geology: GeologyUnit
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-137962296122304 | GeologyGenerationTask started (Background Thread)
2026-01-09 20:54:04 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-137962296122304 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-137962296122304 | GeologyGenerationTask started (Background Thread)
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-137962296122304 | GeologyGenerationTask finished with 1 segments
2026-01-09 20:54:04 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-137962296122304 | Test Title: Test Message
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-137962296122304 | Test Title: Test Message
2026-01-09 20:54:04 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-137962296122304 | Test Title: Test Message
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-137962296122304 | CRITICAL_OP: finalize_polygon | points=2
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-137962296122304 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-09 20:54:04 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-137962296122304 | finalize_polygon() aborted - less than 3 points
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-137962296122304 | CRITICAL_OP: finalize_polygon | points=3
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-137962296122304 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-137962296122304 | finalize_polygon() - emitting polygonFinished signal for ad38051f-fcf0-4f5c-a382-b70968931fab
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-137962296122304 | Interpretation polygon finalized with 3 vertices, ID: ad38051f-fcf0-4f5c-a382-b70968931fab
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-137962296122304 | finalize_polygon() completed
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-137962296122304 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-137962296122304 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-137962296122304 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-137962296122304 | ProfileInterpretationTool.reset() completed
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-137962296122304 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-137962296122304 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-137962296122304 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-137962296122304 | ProfileInterpretationTool.reset() completed
2026-01-09 20:54:04 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-137962296122304 | Failed to create locator for layer layer1: mock error
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-137962296122304 | ProfileInterpretationTool.activate() called
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-137962296122304 | ProfileInterpretationTool activated successfully
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-137962296122304 | ProfileInterpretationTool.deactivate() called
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-137962296122304 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-137962296122304 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-137962296122304 | ProfileInterpretationTool.reset() completed
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-137962296122304 | ProfileInterpretationTool deactivated successfully
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137962296122304 | Global setting fallback: buffer_dist = 100.5
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-137962296122304 | Persistent interpretations cleared by reset
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-137962296122304 | Setting saved to project: test_layer = id_123
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-137962296122304 | Setting saved to project: test_layer_name = RealName
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137962296122304 | Global setting fallback: test_layer = 1.0
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137962296122304 | Project setting hit: test_layer_name = RealName
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-137962296122304 | Restoring layer: test_layer -> RealName
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-137962296122304 | Point 1 added: 0.00, 0.00
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-137962296122304 | Point 2 added: 100.00, 100.00
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-137962296122304 | Point 1 added: 50.00, 50.00
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-137962296122304 | reset() called, finalized=False
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-137962296122304 | finalize_measurement called with 1 points
2026-01-09 20:54:04 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-137962296122304 | Cannot finalize measurement with less than 2 points
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-137962296122304 | finalize_measurement called with 2 points
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-137962296122304 | Setting finalized = True
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-137962296122304 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-137962296122304 | Switching to pan tool to stop measurement
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-137962296122304 | Pan tool activated - measurement should be frozen
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-137962296122304 | Ignoring click - measurement is finalized
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-137962296122304 | finalize_measurement called with 2 points
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-137962296122304 | Setting finalized = True
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-137962296122304 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-137962296122304 | Switching to pan tool to stop measurement
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-137962296122304 | Pan tool activated - measurement should be frozen
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-137962296122304 | reset() called, finalized=False
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-137962296122304 | reset() called, finalized=False
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-137962296122304 | reset() called, finalized=True
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-137962296122304 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-137962296122304 | reset() called, finalized=False
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-137962296122304 | finalize_measurement called with 2 points
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-137962296122304 | Setting finalized = True
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-137962296122304 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-137962296122304 | Rubber band redrawn with final points only
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-137962296122304 | Switching to pan tool to stop measurement
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-137962296122304 | Pan tool activated - measurement should be frozen
2026-01-09 20:54:04 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-137962296122304 | Failed to create locator for layer layer1: mock error
2026-01-09 20:54:04 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-137962296122304 | Failed to create locator for layer l2: fail
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-137962296122304 | ProfileMeasureTool activated
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-137962296122304 | reset() called, finalized=False
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-137962296122304 | ProfileMeasureTool deactivated
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-137962296122304 | create_drillhole_trace_layer called with 1 holes
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-137962296122304 | Adding 1 drillhole trace features to layer
2026-01-09 20:54:04 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-137962296122304 | Failed to create memory layer: Fail
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-137962296122304 | create_drillhole_trace_layer called with 0 holes
2026-01-09 20:54:04 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-137962296122304 | No drillhole data provided for trace layer
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-137962296122304 | create_drillhole_trace_layer called with 1 holes
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-137962296122304 | Skipping hole H1: insufficient trace points (1)
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-137962296122304 | Adding 0 drillhole trace features to layer
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-137962296122304 | create_drillhole_trace_layer called with 1 holes
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137962296122304 | render() called
2026-01-09 20:54:04 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-137962296122304 | No valid layers to render
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137962296122304 | render() called
2026-01-09 20:54:04 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-137962296122304 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137962296122304 | render() called
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137962296122304 | render() called
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137962296122304 | render() called
2026-01-09 20:54:04 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-137962296122304 | No valid layers to render
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137962296122304 | render() called
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137962296122304 | render() called
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-137962296122304 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-137962296122304 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-137962296122304 | CacheService initialized (Default TTL: 3600s)
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-137962296122304 | ProfileController initialized
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-137962296122304 | CacheService initialized (Default TTL: 3600s)
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-137962296122304 | ProfileController initialized
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-137962296122304 | CacheService initialized (Default TTL: 3600s)
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-137962296122304 | ProfileController initialized
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-137962296122304 | Point 1 added: 0.00, 0.00
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-137962296122304 | Point 2 added: 10.00, 10.00
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-137962296122304 | finalize_measurement called with 2 points
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-137962296122304 | Setting finalized = True
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-137962296122304 | Measurement finalized: 2 points, 14.14m total distance
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-137962296122304 | Rubber band redrawn with final points only
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-137962296122304 | Switching to pan tool to stop measurement
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-137962296122304 | Pan tool activated - measurement should be frozen
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-137962296122304 | reset() called, finalized=True
2026-01-09 20:54:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-137962296122304 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-137962296122304 | Point 1 added: 0.00, 0.00
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-137962296122304 | Point 2 added: 100.00, 100.00
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-137962296122304 | CacheService initialized (Default TTL: 3600s)
2026-01-09 20:54:04 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-137962296122304 | ProfileController initialized
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-136285293243328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-136285293243328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-136285293243328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-136285293243328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:135 | Thread-136285293243328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:135 | Thread-136285293243328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-136285293243328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-136285293243328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-136285293243328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-136285293243328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-136285293243328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-136285293243328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-136285293243328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-136285293243328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-136285293243328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-136285293243328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-136285293243328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-136285293243328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-136285293243328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-136285293243328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-136285293243328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-136285293243328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-136285293243328 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136285293243328 | Config set: SecInterp/scale = 50000.0
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136285293243328 | Config set: SecInterp/vert_exag = 1.0
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136285293243328 | Config set: SecInterp/buffer_dist = 100.0
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136285293243328 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136285293243328 | Config set: SecInterp/last_output_dir = 
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136285293243328 | Config set: SecInterp/dpi = 300
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136285293243328 | Config set: SecInterp/preview_width = 800
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136285293243328 | Config set: SecInterp/preview_height = 600
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136285293243328 | Config set: SecInterp/sampling_interval = 10.0
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136285293243328 | Config set: SecInterp/export_quality = 95
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136285293243328 | Config set: SecInterp/auto_lod = True
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136285293243328 | Config set: SecInterp/max_preview_points = 10000
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-136285293243328 | Configuration reset to defaults
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-136285293243328 | Config set: SecInterp/scale = 200.0
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-136285293243328 | CacheService initialized (Default TTL: 3600s)
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-136285293243328 | CacheService initialized (Default TTL: 3600s)
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-136285293243328 | CacheService initialized (Default TTL: 3600s)
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-136285293243328 | Projecting collars from Test Layer with buffer 50.0m
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-136285293243328 | No collars found within buffer area.
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-136285293243328 | Projecting collars from Test Layer with buffer 50.0m
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-136285293243328 | DrillholeService.project_collars END: Found 1 collars.
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-136285293243328 | ✓ Saving profile axes...
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-136285293243328 | ✓ Saving topographic profile...
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-136285293243328 | ✓ Saving profile axes...
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-136285293243328 | ✓ Saving interpretation data...
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:253 | Thread-136285293243328 | 3D Export features are restricted for this user.
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-136285293243328 | ✓ Saving topographic profile...
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-136285293243328 | ✓ Saving profile axes...
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-136285293243328 | ✓ Saving interpretation data...
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:236 | Thread-136285293243328 | ✓ Saving 3D interpretation data...
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-136285293243328 | ✓ Saving topographic profile...
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-136285293243328 | ✓ Saving profile axes...
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:134 | Thread-136285293243328 | ✓ Saving geological profile...
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:162 | Thread-136285293243328 | ✓ Saving structural profile...
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:198 | Thread-136285293243328 | ✓ Saving drillhole data...
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-136285293243328 | ✓ Saving interpretation data...
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-136285293243328 | Access denied for restricted feature: 3D Export
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:253 | Thread-136285293243328 | 3D Export features are restricted for this user.
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-136285293243328 | ✓ Saving topographic profile...
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-136285293243328 | ✓ Saving profile axes...
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:220 | Thread-136285293243328 | No interpretations provided for export.
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:198 | Thread-136285293243328 | ✓ Saving drillhole data...
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:134 | Thread-136285293243328 | ✓ Saving geological profile...
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-136285293243328 | ✓ Saving interpretation data...
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:236 | Thread-136285293243328 | ✓ Saving 3D interpretation data...
2026-01-09 20:56:41 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:251 | Thread-136285293243328 | Invalid section line layer, skipping 3D export.
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-136285293243328 | ✓ Saving interpretation data...
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:162 | Thread-136285293243328 | ✓ Saving structural profile...
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-136285293243328 | ✓ Saving topographic profile...
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-136285293243328 | Generating master profile with interval=10.00
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-136285293243328 | Generating master profile with interval=50.00
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-136285293243328 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-136285293243328 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-136285293243328 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-136285293243328 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-136285293243328 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-136285293243328 | Running geometry operation: test
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-136285293243328 | Generated 1 drillhole traces
2026-01-09 20:56:41 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-136285293243328 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-09 20:56:41 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-136285293243328 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-136285293243328 | Generated 1 drillhole traces
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-136285293243328 | Drillhole preview skipped: No Collar ID field selected.
2026-01-09 20:56:41 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-136285293243328 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 20:56:41 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-136285293243328 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 20:56:41 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-136285293243328 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 20:56:41 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-136285293243328 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 20:56:41 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-136285293243328 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-136285293243328 | Analyzing structures in Structure Layer with buffer 10m
2026-01-09 20:56:41 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-136285293243328 | Processed 1 structural measurements from Structure Layer
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-140410140535744 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-140410140535744 | Loaded 0 interpretations from project
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:365 | Thread-140410140535744 | Inherited attributes from geology: GeologyUnit
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-140410140535744 | GeologyGenerationTask started (Background Thread)
2026-01-09 20:56:42 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-140410140535744 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-140410140535744 | GeologyGenerationTask started (Background Thread)
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-140410140535744 | GeologyGenerationTask finished with 1 segments
2026-01-09 20:56:42 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-140410140535744 | Test Title: Test Message
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-140410140535744 | Test Title: Test Message
2026-01-09 20:56:42 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-140410140535744 | Test Title: Test Message
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-140410140535744 | CRITICAL_OP: finalize_polygon | points=2
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-140410140535744 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-09 20:56:42 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-140410140535744 | finalize_polygon() aborted - less than 3 points
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-140410140535744 | CRITICAL_OP: finalize_polygon | points=3
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-140410140535744 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-140410140535744 | finalize_polygon() - emitting polygonFinished signal for cfcfeca3-8c05-4fd6-b144-d2ff47811ade
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-140410140535744 | Interpretation polygon finalized with 3 vertices, ID: cfcfeca3-8c05-4fd6-b144-d2ff47811ade
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-140410140535744 | finalize_polygon() completed
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-140410140535744 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-140410140535744 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-140410140535744 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-140410140535744 | ProfileInterpretationTool.reset() completed
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-140410140535744 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-140410140535744 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-140410140535744 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-140410140535744 | ProfileInterpretationTool.reset() completed
2026-01-09 20:56:42 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-140410140535744 | Failed to create locator for layer layer1: mock error
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-140410140535744 | ProfileInterpretationTool.activate() called
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-140410140535744 | ProfileInterpretationTool activated successfully
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-140410140535744 | ProfileInterpretationTool.deactivate() called
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-140410140535744 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-140410140535744 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-140410140535744 | ProfileInterpretationTool.reset() completed
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-140410140535744 | ProfileInterpretationTool deactivated successfully
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140410140535744 | Global setting fallback: buffer_dist = 100.5
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-140410140535744 | Persistent interpretations cleared by reset
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-140410140535744 | Setting saved to project: test_layer = id_123
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-140410140535744 | Setting saved to project: test_layer_name = RealName
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140410140535744 | Global setting fallback: test_layer = 1.0
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-140410140535744 | Project setting hit: test_layer_name = RealName
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-140410140535744 | Restoring layer: test_layer -> RealName
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-140410140535744 | Point 1 added: 0.00, 0.00
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-140410140535744 | Point 2 added: 100.00, 100.00
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-140410140535744 | Point 1 added: 50.00, 50.00
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-140410140535744 | reset() called, finalized=False
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-140410140535744 | finalize_measurement called with 1 points
2026-01-09 20:56:42 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-140410140535744 | Cannot finalize measurement with less than 2 points
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-140410140535744 | finalize_measurement called with 2 points
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-140410140535744 | Setting finalized = True
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-140410140535744 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-140410140535744 | Switching to pan tool to stop measurement
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-140410140535744 | Pan tool activated - measurement should be frozen
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-140410140535744 | Ignoring click - measurement is finalized
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-140410140535744 | finalize_measurement called with 2 points
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-140410140535744 | Setting finalized = True
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-140410140535744 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-140410140535744 | Switching to pan tool to stop measurement
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-140410140535744 | Pan tool activated - measurement should be frozen
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-140410140535744 | reset() called, finalized=False
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-140410140535744 | reset() called, finalized=False
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-140410140535744 | reset() called, finalized=True
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-140410140535744 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-140410140535744 | reset() called, finalized=False
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-140410140535744 | finalize_measurement called with 2 points
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-140410140535744 | Setting finalized = True
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-140410140535744 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-140410140535744 | Rubber band redrawn with final points only
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-140410140535744 | Switching to pan tool to stop measurement
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-140410140535744 | Pan tool activated - measurement should be frozen
2026-01-09 20:56:42 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-140410140535744 | Failed to create locator for layer layer1: mock error
2026-01-09 20:56:42 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-140410140535744 | Failed to create locator for layer l2: fail
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-140410140535744 | ProfileMeasureTool activated
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-140410140535744 | reset() called, finalized=False
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-140410140535744 | ProfileMeasureTool deactivated
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-140410140535744 | create_drillhole_trace_layer called with 1 holes
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-140410140535744 | Adding 1 drillhole trace features to layer
2026-01-09 20:56:42 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-140410140535744 | Failed to create memory layer: Fail
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-140410140535744 | create_drillhole_trace_layer called with 0 holes
2026-01-09 20:56:42 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-140410140535744 | No drillhole data provided for trace layer
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-140410140535744 | create_drillhole_trace_layer called with 1 holes
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-140410140535744 | Skipping hole H1: insufficient trace points (1)
2026-01-09 20:56:42 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-140410140535744 | Adding 0 drillhole trace features to layer
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-140410140535744 | create_drillhole_trace_layer called with 1 holes
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-140410140535744 | render() called
2026-01-09 20:56:42 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-140410140535744 | No valid layers to render
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-140410140535744 | render() called
2026-01-09 20:56:42 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-140410140535744 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-140410140535744 | render() called
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-140410140535744 | render() called
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-140410140535744 | render() called
2026-01-09 20:56:42 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-140410140535744 | No valid layers to render
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-140410140535744 | render() called
2026-01-09 20:56:42 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-140410140535744 | render() called
2026-01-09 20:57:05 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:05 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:05 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:05 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:05 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:05 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:05 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:05 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:05 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:05 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:05 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:05 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:05 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:05 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:05 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:05 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:05 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:05 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:05 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:05 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:05 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-132849707379648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:06 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-132849707379648 | Loaded 0 interpretations from project
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: section_layer = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: section_layer_name = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-132849707379648 | Failed to restore layer for section_layer
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: buffer_dist = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: dem_layer = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: dem_layer_name = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-132849707379648 | Failed to restore layer for dem_layer
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: dem_band = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: scale = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: vert_exag = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: geol_layer = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: geol_layer_name = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-132849707379648 | Failed to restore layer for geol_layer
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: geol_field = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: struct_layer = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: struct_layer_name = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-132849707379648 | Failed to restore layer for struct_layer
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: struct_dip_field = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: struct_strike_field = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: dip_scale_factor = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: dh_collar_layer = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-132849707379648 | Failed to restore layer for dh_collar_layer
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: dh_collar_id = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: dh_use_geom = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: dh_collar_x = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: dh_collar_y = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: dh_collar_z = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: dh_collar_depth = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: dh_survey_layer = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-132849707379648 | Failed to restore layer for dh_survey_layer
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: dh_survey_id = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: dh_survey_depth = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: dh_survey_azim = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: dh_survey_incl = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: dh_interval_layer = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-132849707379648 | Failed to restore layer for dh_interval_layer
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: dh_interval_id = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: dh_interval_from = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: dh_interval_to = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: dh_interval_lith = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: last_output_dir = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: interp_custom_fields = 1.0
2026-01-09 20:57:06 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-132849707379648 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: show_topo = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: show_geol = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: show_struct = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: show_drillholes = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: show_interpretations = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: auto_lod = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: adaptive_sampling = 1.0
2026-01-09 20:57:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132849707379648 | Global setting fallback: max_points = 1.0
2026-01-09 20:57:06 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-132849707379648 | Settings loaded successfully from Project/Global config
2026-01-09 20:57:06 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:473 | Thread-132849707379648 | Cache cleared by user
2026-01-09 20:57:41 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:135 | Thread-135326967987136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-135326967987136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-135326967987136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:41 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-135326967987136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:41 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-135326967987136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:41 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:135 | Thread-135326967987136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-135326967987136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:42 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:135 | Thread-135326967987136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:42 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-135326967987136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:42 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-135326967987136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:42 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-135326967987136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 20:57:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-135326967987136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-123296853224384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-123296853224384 | Loaded 0 interpretations from project
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:365 | Thread-123296853224384 | Inherited attributes from geology: GeologyUnit
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-123296853224384 | GeologyGenerationTask started (Background Thread)
2026-01-09 21:01:09 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-123296853224384 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-123296853224384 | GeologyGenerationTask started (Background Thread)
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-123296853224384 | GeologyGenerationTask finished with 1 segments
2026-01-09 21:01:09 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-123296853224384 | Test Title: Test Message
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-123296853224384 | Test Title: Test Message
2026-01-09 21:01:09 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-123296853224384 | Test Title: Test Message
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-123296853224384 | CRITICAL_OP: finalize_polygon | points=2
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-123296853224384 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-09 21:01:09 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-123296853224384 | finalize_polygon() aborted - less than 3 points
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-123296853224384 | CRITICAL_OP: finalize_polygon | points=3
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-123296853224384 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-123296853224384 | finalize_polygon() - emitting polygonFinished signal for 8d570ac4-974a-47f6-8fe0-8b5424bf326b
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-123296853224384 | Interpretation polygon finalized with 3 vertices, ID: 8d570ac4-974a-47f6-8fe0-8b5424bf326b
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-123296853224384 | finalize_polygon() completed
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-123296853224384 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-123296853224384 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-123296853224384 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-123296853224384 | ProfileInterpretationTool.reset() completed
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-123296853224384 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-123296853224384 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-123296853224384 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-123296853224384 | ProfileInterpretationTool.reset() completed
2026-01-09 21:01:09 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-123296853224384 | Failed to create locator for layer layer1: mock error
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-123296853224384 | ProfileInterpretationTool.activate() called
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-123296853224384 | ProfileInterpretationTool activated successfully
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-123296853224384 | ProfileInterpretationTool.deactivate() called
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-123296853224384 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-123296853224384 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-123296853224384 | ProfileInterpretationTool.reset() completed
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-123296853224384 | ProfileInterpretationTool deactivated successfully
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123296853224384 | Global setting fallback: buffer_dist = 100.5
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-123296853224384 | Persistent interpretations cleared by reset
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-123296853224384 | Setting saved to project: test_layer = id_123
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-123296853224384 | Setting saved to project: test_layer_name = RealName
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123296853224384 | Global setting fallback: test_layer = 1.0
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-123296853224384 | Project setting hit: test_layer_name = RealName
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-123296853224384 | Restoring layer: test_layer -> RealName
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-123296853224384 | Point 1 added: 0.00, 0.00
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-123296853224384 | Point 2 added: 100.00, 100.00
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-123296853224384 | Point 1 added: 50.00, 50.00
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-123296853224384 | reset() called, finalized=False
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-123296853224384 | finalize_measurement called with 1 points
2026-01-09 21:01:09 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-123296853224384 | Cannot finalize measurement with less than 2 points
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-123296853224384 | finalize_measurement called with 2 points
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-123296853224384 | Setting finalized = True
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-123296853224384 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-123296853224384 | Switching to pan tool to stop measurement
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-123296853224384 | Pan tool activated - measurement should be frozen
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-123296853224384 | Ignoring click - measurement is finalized
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-123296853224384 | finalize_measurement called with 2 points
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-123296853224384 | Setting finalized = True
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-123296853224384 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-123296853224384 | Switching to pan tool to stop measurement
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-123296853224384 | Pan tool activated - measurement should be frozen
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-123296853224384 | reset() called, finalized=False
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-123296853224384 | reset() called, finalized=False
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-123296853224384 | reset() called, finalized=True
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-123296853224384 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-123296853224384 | reset() called, finalized=False
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-123296853224384 | finalize_measurement called with 2 points
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-123296853224384 | Setting finalized = True
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-123296853224384 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-123296853224384 | Rubber band redrawn with final points only
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-123296853224384 | Switching to pan tool to stop measurement
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-123296853224384 | Pan tool activated - measurement should be frozen
2026-01-09 21:01:09 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-123296853224384 | Failed to create locator for layer layer1: mock error
2026-01-09 21:01:09 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-123296853224384 | Failed to create locator for layer l2: fail
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-123296853224384 | ProfileMeasureTool activated
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-123296853224384 | reset() called, finalized=False
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-123296853224384 | ProfileMeasureTool deactivated
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-123296853224384 | create_drillhole_trace_layer called with 1 holes
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-123296853224384 | Adding 1 drillhole trace features to layer
2026-01-09 21:01:09 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-123296853224384 | Failed to create memory layer: Fail
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-123296853224384 | create_drillhole_trace_layer called with 0 holes
2026-01-09 21:01:09 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-123296853224384 | No drillhole data provided for trace layer
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-123296853224384 | create_drillhole_trace_layer called with 1 holes
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-123296853224384 | Skipping hole H1: insufficient trace points (1)
2026-01-09 21:01:09 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-123296853224384 | Adding 0 drillhole trace features to layer
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-123296853224384 | create_drillhole_trace_layer called with 1 holes
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123296853224384 | render() called
2026-01-09 21:01:09 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-123296853224384 | No valid layers to render
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123296853224384 | render() called
2026-01-09 21:01:09 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-123296853224384 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123296853224384 | render() called
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123296853224384 | render() called
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123296853224384 | render() called
2026-01-09 21:01:09 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-123296853224384 | No valid layers to render
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123296853224384 | render() called
2026-01-09 21:01:09 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123296853224384 | render() called
2026-01-09 21:01:21 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:21 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-133492799953856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:01:22 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-133492799953856 | Loaded 0 interpretations from project
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: section_layer = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: section_layer_name = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-133492799953856 | Failed to restore layer for section_layer
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: buffer_dist = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: dem_layer = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: dem_layer_name = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-133492799953856 | Failed to restore layer for dem_layer
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: dem_band = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: scale = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: vert_exag = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: geol_layer = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: geol_layer_name = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-133492799953856 | Failed to restore layer for geol_layer
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: geol_field = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: struct_layer = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: struct_layer_name = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-133492799953856 | Failed to restore layer for struct_layer
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: struct_dip_field = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: struct_strike_field = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: dip_scale_factor = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: dh_collar_layer = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-133492799953856 | Failed to restore layer for dh_collar_layer
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: dh_collar_id = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: dh_use_geom = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: dh_collar_x = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: dh_collar_y = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: dh_collar_z = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: dh_collar_depth = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: dh_survey_layer = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-133492799953856 | Failed to restore layer for dh_survey_layer
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: dh_survey_id = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: dh_survey_depth = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: dh_survey_azim = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: dh_survey_incl = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: dh_interval_layer = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-133492799953856 | Failed to restore layer for dh_interval_layer
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: dh_interval_id = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: dh_interval_from = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: dh_interval_to = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: dh_interval_lith = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: last_output_dir = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: interp_custom_fields = 1.0
2026-01-09 21:01:22 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-133492799953856 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: show_topo = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: show_geol = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: show_struct = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: show_drillholes = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: show_interpretations = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: auto_lod = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: adaptive_sampling = 1.0
2026-01-09 21:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133492799953856 | Global setting fallback: max_points = 1.0
2026-01-09 21:01:22 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-133492799953856 | Settings loaded successfully from Project/Global config
2026-01-09 21:01:22 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:473 | Thread-133492799953856 | Cache cleared by user
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-137395771431872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-137395771431872 | create_drillhole_trace_layer called with 1 holes
2026-01-09 21:03:50 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-137395771431872 | Adding 1 drillhole trace features to layer
2026-01-09 21:03:50 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-137395771431872 | Failed to create memory layer: Fail
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-137395771431872 | create_drillhole_trace_layer called with 0 holes
2026-01-09 21:03:50 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-137395771431872 | No drillhole data provided for trace layer
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-137395771431872 | create_drillhole_trace_layer called with 1 holes
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-137395771431872 | Skipping hole H1: insufficient trace points (1)
2026-01-09 21:03:50 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-137395771431872 | Adding 0 drillhole trace features to layer
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-137395771431872 | create_drillhole_trace_layer called with 1 holes
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137395771431872 | render() called
2026-01-09 21:03:50 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-137395771431872 | No valid layers to render
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137395771431872 | render() called
2026-01-09 21:03:50 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-137395771431872 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137395771431872 | render() called
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137395771431872 | render() called
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137395771431872 | render() called
2026-01-09 21:03:50 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-137395771431872 | No valid layers to render
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137395771431872 | render() called
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137395771431872 | render() called
2026-01-09 21:03:50 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-137395771431872 | Loaded 0 interpretations from project
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: section_layer = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: section_layer_name = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-137395771431872 | Failed to restore layer for section_layer
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: buffer_dist = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: dem_layer = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: dem_layer_name = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-137395771431872 | Failed to restore layer for dem_layer
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: dem_band = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: scale = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: vert_exag = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: geol_layer = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: geol_layer_name = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-137395771431872 | Failed to restore layer for geol_layer
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: geol_field = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: struct_layer = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: struct_layer_name = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-137395771431872 | Failed to restore layer for struct_layer
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: struct_dip_field = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: struct_strike_field = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: dip_scale_factor = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: dh_collar_layer = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-137395771431872 | Failed to restore layer for dh_collar_layer
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: dh_collar_id = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: dh_use_geom = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: dh_collar_x = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: dh_collar_y = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: dh_collar_z = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: dh_collar_depth = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: dh_survey_layer = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-137395771431872 | Failed to restore layer for dh_survey_layer
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: dh_survey_id = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: dh_survey_depth = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: dh_survey_azim = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: dh_survey_incl = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: dh_interval_layer = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-137395771431872 | Failed to restore layer for dh_interval_layer
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: dh_interval_id = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: dh_interval_from = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: dh_interval_to = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: dh_interval_lith = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: last_output_dir = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: interp_custom_fields = 1.0
2026-01-09 21:03:50 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-137395771431872 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: show_topo = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: show_geol = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: show_struct = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: show_drillholes = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: show_interpretations = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: auto_lod = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: adaptive_sampling = 1.0
2026-01-09 21:03:50 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137395771431872 | Global setting fallback: max_points = 1.0
2026-01-09 21:03:50 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-137395771431872 | Settings loaded successfully from Project/Global config
2026-01-09 21:03:50 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:473 | Thread-137395771431872 | Cache cleared by user
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-124275473394624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-124275473394624 | Point 1 added: 0.00, 0.00
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-124275473394624 | Point 2 added: 100.00, 100.00
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-124275473394624 | Point 1 added: 50.00, 50.00
2026-01-09 21:03:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-124275473394624 | reset() called, finalized=False
2026-01-09 21:03:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124275473394624 | finalize_measurement called with 1 points
2026-01-09 21:03:57 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-124275473394624 | Cannot finalize measurement with less than 2 points
2026-01-09 21:03:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124275473394624 | finalize_measurement called with 2 points
2026-01-09 21:03:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-124275473394624 | Setting finalized = True
2026-01-09 21:03:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-124275473394624 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 21:03:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-124275473394624 | Switching to pan tool to stop measurement
2026-01-09 21:03:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-124275473394624 | Pan tool activated - measurement should be frozen
2026-01-09 21:03:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-124275473394624 | Ignoring click - measurement is finalized
2026-01-09 21:03:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124275473394624 | finalize_measurement called with 2 points
2026-01-09 21:03:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-124275473394624 | Setting finalized = True
2026-01-09 21:03:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-124275473394624 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 21:03:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-124275473394624 | Switching to pan tool to stop measurement
2026-01-09 21:03:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-124275473394624 | Pan tool activated - measurement should be frozen
2026-01-09 21:03:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-124275473394624 | reset() called, finalized=False
2026-01-09 21:03:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-124275473394624 | reset() called, finalized=False
2026-01-09 21:03:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-124275473394624 | reset() called, finalized=True
2026-01-09 21:03:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-124275473394624 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-09 21:03:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-124275473394624 | reset() called, finalized=False
2026-01-09 21:03:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124275473394624 | finalize_measurement called with 2 points
2026-01-09 21:03:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-124275473394624 | Setting finalized = True
2026-01-09 21:03:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-124275473394624 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 21:03:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-124275473394624 | Rubber band redrawn with final points only
2026-01-09 21:03:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-124275473394624 | Switching to pan tool to stop measurement
2026-01-09 21:03:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-124275473394624 | Pan tool activated - measurement should be frozen
2026-01-09 21:03:57 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-124275473394624 | Failed to create locator for layer layer1: mock error
2026-01-09 21:03:57 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-124275473394624 | Failed to create locator for layer l2: fail
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-124275473394624 | ProfileMeasureTool activated
2026-01-09 21:03:57 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-124275473394624 | reset() called, finalized=False
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-124275473394624 | ProfileMeasureTool deactivated
2026-01-09 21:03:57 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-124275473394624 | Loaded 0 interpretations from project
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: section_layer = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: section_layer_name = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-124275473394624 | Failed to restore layer for section_layer
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: buffer_dist = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: dem_layer = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: dem_layer_name = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-124275473394624 | Failed to restore layer for dem_layer
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: dem_band = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: scale = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: vert_exag = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: geol_layer = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: geol_layer_name = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-124275473394624 | Failed to restore layer for geol_layer
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: geol_field = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: struct_layer = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: struct_layer_name = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-124275473394624 | Failed to restore layer for struct_layer
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: struct_dip_field = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: struct_strike_field = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: dip_scale_factor = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: dh_collar_layer = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-124275473394624 | Failed to restore layer for dh_collar_layer
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: dh_collar_id = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: dh_use_geom = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: dh_collar_x = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: dh_collar_y = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: dh_collar_z = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: dh_collar_depth = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: dh_survey_layer = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-124275473394624 | Failed to restore layer for dh_survey_layer
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: dh_survey_id = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: dh_survey_depth = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: dh_survey_azim = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: dh_survey_incl = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: dh_interval_layer = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-124275473394624 | Failed to restore layer for dh_interval_layer
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: dh_interval_id = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: dh_interval_from = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: dh_interval_to = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: dh_interval_lith = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: last_output_dir = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-09 21:03:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: interp_custom_fields = 1.0
2026-01-09 21:03:58 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-124275473394624 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-09 21:03:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: show_topo = 1.0
2026-01-09 21:03:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: show_geol = 1.0
2026-01-09 21:03:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: show_struct = 1.0
2026-01-09 21:03:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: show_drillholes = 1.0
2026-01-09 21:03:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: show_interpretations = 1.0
2026-01-09 21:03:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: auto_lod = 1.0
2026-01-09 21:03:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: adaptive_sampling = 1.0
2026-01-09 21:03:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124275473394624 | Global setting fallback: max_points = 1.0
2026-01-09 21:03:58 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-124275473394624 | Settings loaded successfully from Project/Global config
2026-01-09 21:03:58 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:473 | Thread-124275473394624 | Cache cleared by user
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-140502549109696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-140502549109696 | CRITICAL_OP: finalize_polygon | points=2
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-140502549109696 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-09 21:04:03 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-140502549109696 | finalize_polygon() aborted - less than 3 points
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-140502549109696 | CRITICAL_OP: finalize_polygon | points=3
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-140502549109696 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-140502549109696 | finalize_polygon() - emitting polygonFinished signal for 0050748b-e8ee-4371-81bd-e584d531b1f3
2026-01-09 21:04:03 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-140502549109696 | Interpretation polygon finalized with 3 vertices, ID: 0050748b-e8ee-4371-81bd-e584d531b1f3
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-140502549109696 | finalize_polygon() completed
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-140502549109696 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-140502549109696 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-140502549109696 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-140502549109696 | ProfileInterpretationTool.reset() completed
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-140502549109696 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-140502549109696 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-140502549109696 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-140502549109696 | ProfileInterpretationTool.reset() completed
2026-01-09 21:04:03 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-140502549109696 | Failed to create locator for layer layer1: mock error
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-140502549109696 | ProfileInterpretationTool.activate() called
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-140502549109696 | ProfileInterpretationTool activated successfully
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-140502549109696 | ProfileInterpretationTool.deactivate() called
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-140502549109696 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-140502549109696 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-140502549109696 | ProfileInterpretationTool.reset() completed
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-140502549109696 | ProfileInterpretationTool deactivated successfully
2026-01-09 21:04:03 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-140502549109696 | Loaded 0 interpretations from project
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: section_layer = 1.0
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: section_layer_name = 1.0
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-140502549109696 | Failed to restore layer for section_layer
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: buffer_dist = 1.0
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: dem_layer = 1.0
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: dem_layer_name = 1.0
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-140502549109696 | Failed to restore layer for dem_layer
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: dem_band = 1.0
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: scale = 1.0
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: vert_exag = 1.0
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: geol_layer = 1.0
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: geol_layer_name = 1.0
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-140502549109696 | Failed to restore layer for geol_layer
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: geol_field = 1.0
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: struct_layer = 1.0
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: struct_layer_name = 1.0
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-140502549109696 | Failed to restore layer for struct_layer
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: struct_dip_field = 1.0
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: struct_strike_field = 1.0
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: dip_scale_factor = 1.0
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: dh_collar_layer = 1.0
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-140502549109696 | Failed to restore layer for dh_collar_layer
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: dh_collar_id = 1.0
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: dh_use_geom = 1.0
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: dh_collar_x = 1.0
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: dh_collar_y = 1.0
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: dh_collar_z = 1.0
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: dh_collar_depth = 1.0
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: dh_survey_layer = 1.0
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-140502549109696 | Failed to restore layer for dh_survey_layer
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: dh_survey_id = 1.0
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: dh_survey_depth = 1.0
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: dh_survey_azim = 1.0
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: dh_survey_incl = 1.0
2026-01-09 21:04:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: dh_interval_layer = 1.0
2026-01-09 21:04:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-09 21:04:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-140502549109696 | Failed to restore layer for dh_interval_layer
2026-01-09 21:04:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: dh_interval_id = 1.0
2026-01-09 21:04:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: dh_interval_from = 1.0
2026-01-09 21:04:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: dh_interval_to = 1.0
2026-01-09 21:04:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: dh_interval_lith = 1.0
2026-01-09 21:04:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: last_output_dir = 1.0
2026-01-09 21:04:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-09 21:04:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-09 21:04:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: interp_custom_fields = 1.0
2026-01-09 21:04:04 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-140502549109696 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-09 21:04:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: show_topo = 1.0
2026-01-09 21:04:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: show_geol = 1.0
2026-01-09 21:04:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: show_struct = 1.0
2026-01-09 21:04:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: show_drillholes = 1.0
2026-01-09 21:04:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: show_interpretations = 1.0
2026-01-09 21:04:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: auto_lod = 1.0
2026-01-09 21:04:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: adaptive_sampling = 1.0
2026-01-09 21:04:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-140502549109696 | Global setting fallback: max_points = 1.0
2026-01-09 21:04:04 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-140502549109696 | Settings loaded successfully from Project/Global config
2026-01-09 21:04:04 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:473 | Thread-140502549109696 | Cache cleared by user
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-138585387371456 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:16 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-138585387371456 | Loaded 0 interpretations from project
2026-01-09 21:04:16 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:365 | Thread-138585387371456 | Inherited attributes from geology: GeologyUnit
2026-01-09 21:04:16 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-138585387371456 | GeologyGenerationTask started (Background Thread)
2026-01-09 21:04:16 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-138585387371456 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-09 21:04:16 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-138585387371456 | GeologyGenerationTask started (Background Thread)
2026-01-09 21:04:16 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-138585387371456 | GeologyGenerationTask finished with 1 segments
2026-01-09 21:04:16 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-138585387371456 | Test Title: Test Message
2026-01-09 21:04:16 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-138585387371456 | Test Title: Test Message
2026-01-09 21:04:16 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-138585387371456 | Test Title: Test Message
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138585387371456 | Global setting fallback: buffer_dist = 100.5
2026-01-09 21:04:16 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-138585387371456 | Persistent interpretations cleared by reset
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-138585387371456 | Setting saved to project: test_layer = id_123
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-138585387371456 | Setting saved to project: test_layer_name = RealName
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138585387371456 | Global setting fallback: test_layer = 1.0
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-138585387371456 | Project setting hit: test_layer_name = RealName
2026-01-09 21:04:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-138585387371456 | Restoring layer: test_layer -> RealName
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-128738181123008 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:23 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-128738181123008 | Loaded 0 interpretations from project
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: section_layer = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: section_layer_name = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-128738181123008 | Failed to restore layer for section_layer
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: buffer_dist = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: dem_layer = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: dem_layer_name = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-128738181123008 | Failed to restore layer for dem_layer
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: dem_band = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: scale = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: vert_exag = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: geol_layer = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: geol_layer_name = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-128738181123008 | Failed to restore layer for geol_layer
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: geol_field = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: struct_layer = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: struct_layer_name = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-128738181123008 | Failed to restore layer for struct_layer
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: struct_dip_field = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: struct_strike_field = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: dip_scale_factor = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: dh_collar_layer = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-128738181123008 | Failed to restore layer for dh_collar_layer
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: dh_collar_id = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: dh_use_geom = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: dh_collar_x = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: dh_collar_y = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: dh_collar_z = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: dh_collar_depth = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: dh_survey_layer = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-128738181123008 | Failed to restore layer for dh_survey_layer
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: dh_survey_id = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: dh_survey_depth = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: dh_survey_azim = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: dh_survey_incl = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: dh_interval_layer = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-128738181123008 | Failed to restore layer for dh_interval_layer
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: dh_interval_id = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: dh_interval_from = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: dh_interval_to = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: dh_interval_lith = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: last_output_dir = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: interp_custom_fields = 1.0
2026-01-09 21:04:23 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-128738181123008 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: show_topo = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: show_geol = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: show_struct = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: show_drillholes = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: show_interpretations = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: auto_lod = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: adaptive_sampling = 1.0
2026-01-09 21:04:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128738181123008 | Global setting fallback: max_points = 1.0
2026-01-09 21:04:23 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-128738181123008 | Settings loaded successfully from Project/Global config
2026-01-09 21:04:23 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:473 | Thread-128738181123008 | Cache cleared by user
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-127127639030720 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: buffer_dist = 100.5
2026-01-09 21:04:30 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-127127639030720 | Persistent interpretations cleared by reset
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-127127639030720 | Setting saved to project: test_layer = id_123
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-127127639030720 | Setting saved to project: test_layer_name = RealName
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: test_layer = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-127127639030720 | Project setting hit: test_layer_name = RealName
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-127127639030720 | Restoring layer: test_layer -> RealName
2026-01-09 21:04:30 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-127127639030720 | Loaded 0 interpretations from project
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: section_layer = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: section_layer_name = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-127127639030720 | Failed to restore layer for section_layer
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: buffer_dist = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: dem_layer = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: dem_layer_name = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-127127639030720 | Failed to restore layer for dem_layer
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: dem_band = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: scale = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: vert_exag = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: geol_layer = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: geol_layer_name = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-127127639030720 | Failed to restore layer for geol_layer
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: geol_field = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: struct_layer = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: struct_layer_name = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-127127639030720 | Failed to restore layer for struct_layer
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: struct_dip_field = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: struct_strike_field = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: dip_scale_factor = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: dh_collar_layer = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-127127639030720 | Failed to restore layer for dh_collar_layer
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: dh_collar_id = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: dh_use_geom = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: dh_collar_x = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: dh_collar_y = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: dh_collar_z = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: dh_collar_depth = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: dh_survey_layer = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-127127639030720 | Failed to restore layer for dh_survey_layer
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: dh_survey_id = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: dh_survey_depth = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: dh_survey_azim = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: dh_survey_incl = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: dh_interval_layer = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-127127639030720 | Failed to restore layer for dh_interval_layer
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: dh_interval_id = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: dh_interval_from = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: dh_interval_to = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: dh_interval_lith = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: last_output_dir = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: interp_custom_fields = 1.0
2026-01-09 21:04:30 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-127127639030720 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: show_topo = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: show_geol = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: show_struct = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: show_drillholes = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: show_interpretations = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: auto_lod = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: adaptive_sampling = 1.0
2026-01-09 21:04:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127127639030720 | Global setting fallback: max_points = 1.0
2026-01-09 21:04:30 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-127127639030720 | Settings loaded successfully from Project/Global config
2026-01-09 21:04:30 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:473 | Thread-127127639030720 | Cache cleared by user
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-136604887952320 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:04:36 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-136604887952320 | Loaded 0 interpretations from project
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: section_layer = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: section_layer_name = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-136604887952320 | Failed to restore layer for section_layer
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: buffer_dist = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: dem_layer = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: dem_layer_name = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-136604887952320 | Failed to restore layer for dem_layer
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: dem_band = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: scale = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: vert_exag = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: geol_layer = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: geol_layer_name = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-136604887952320 | Failed to restore layer for geol_layer
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: geol_field = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: struct_layer = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: struct_layer_name = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-136604887952320 | Failed to restore layer for struct_layer
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: struct_dip_field = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: struct_strike_field = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: dip_scale_factor = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: dh_collar_layer = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-136604887952320 | Failed to restore layer for dh_collar_layer
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: dh_collar_id = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: dh_use_geom = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: dh_collar_x = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: dh_collar_y = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: dh_collar_z = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: dh_collar_depth = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: dh_survey_layer = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-136604887952320 | Failed to restore layer for dh_survey_layer
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: dh_survey_id = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: dh_survey_depth = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: dh_survey_azim = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: dh_survey_incl = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: dh_interval_layer = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-136604887952320 | Failed to restore layer for dh_interval_layer
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: dh_interval_id = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: dh_interval_from = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: dh_interval_to = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: dh_interval_lith = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: last_output_dir = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: interp_custom_fields = 1.0
2026-01-09 21:04:36 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-136604887952320 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: show_topo = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: show_geol = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: show_struct = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: show_drillholes = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: show_interpretations = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: auto_lod = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: adaptive_sampling = 1.0
2026-01-09 21:04:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136604887952320 | Global setting fallback: max_points = 1.0
2026-01-09 21:04:36 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-136604887952320 | Settings loaded successfully from Project/Global config
2026-01-09 21:04:36 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:473 | Thread-136604887952320 | Cache cleared by user
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-138375241124800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:06 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-138375241124800 | Loaded 0 interpretations from project
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: section_layer = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: section_layer_name = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138375241124800 | Failed to restore layer for section_layer
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: buffer_dist = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: dem_layer = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: dem_layer_name = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138375241124800 | Failed to restore layer for dem_layer
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: dem_band = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: scale = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: vert_exag = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: geol_layer = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: geol_layer_name = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138375241124800 | Failed to restore layer for geol_layer
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: geol_field = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: struct_layer = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: struct_layer_name = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138375241124800 | Failed to restore layer for struct_layer
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: struct_dip_field = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: struct_strike_field = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: dip_scale_factor = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: dh_collar_layer = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138375241124800 | Failed to restore layer for dh_collar_layer
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: dh_collar_id = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: dh_use_geom = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: dh_collar_x = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: dh_collar_y = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: dh_collar_z = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: dh_collar_depth = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: dh_survey_layer = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138375241124800 | Failed to restore layer for dh_survey_layer
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: dh_survey_id = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: dh_survey_depth = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: dh_survey_azim = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: dh_survey_incl = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: dh_interval_layer = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138375241124800 | Failed to restore layer for dh_interval_layer
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: dh_interval_id = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: dh_interval_from = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: dh_interval_to = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: dh_interval_lith = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: last_output_dir = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: interp_custom_fields = 1.0
2026-01-09 21:05:06 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-138375241124800 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: show_topo = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: show_geol = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: show_struct = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: show_drillholes = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: show_interpretations = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: auto_lod = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: adaptive_sampling = 1.0
2026-01-09 21:05:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138375241124800 | Global setting fallback: max_points = 1.0
2026-01-09 21:05:06 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-138375241124800 | Settings loaded successfully from Project/Global config
2026-01-09 21:05:06 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:473 | Thread-138375241124800 | Cache cleared by user
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-130565084519360 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:18 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-130565084519360 | GeologyGenerationTask started (Background Thread)
2026-01-09 21:05:18 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-130565084519360 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-09 21:05:18 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-130565084519360 | GeologyGenerationTask started (Background Thread)
2026-01-09 21:05:18 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-130565084519360 | GeologyGenerationTask finished with 1 segments
2026-01-09 21:05:18 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-130565084519360 | Loaded 0 interpretations from project
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: section_layer = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: section_layer_name = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-130565084519360 | Failed to restore layer for section_layer
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: buffer_dist = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: dem_layer = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: dem_layer_name = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-130565084519360 | Failed to restore layer for dem_layer
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: dem_band = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: scale = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: vert_exag = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: geol_layer = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: geol_layer_name = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-130565084519360 | Failed to restore layer for geol_layer
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: geol_field = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: struct_layer = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: struct_layer_name = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-130565084519360 | Failed to restore layer for struct_layer
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: struct_dip_field = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: struct_strike_field = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: dip_scale_factor = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: dh_collar_layer = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-130565084519360 | Failed to restore layer for dh_collar_layer
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: dh_collar_id = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: dh_use_geom = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: dh_collar_x = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: dh_collar_y = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: dh_collar_z = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: dh_collar_depth = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: dh_survey_layer = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-130565084519360 | Failed to restore layer for dh_survey_layer
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: dh_survey_id = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: dh_survey_depth = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: dh_survey_azim = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: dh_survey_incl = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: dh_interval_layer = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-130565084519360 | Failed to restore layer for dh_interval_layer
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: dh_interval_id = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: dh_interval_from = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: dh_interval_to = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: dh_interval_lith = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: last_output_dir = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: interp_custom_fields = 1.0
2026-01-09 21:05:18 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-130565084519360 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: show_topo = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: show_geol = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: show_struct = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: show_drillholes = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: show_interpretations = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: auto_lod = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: adaptive_sampling = 1.0
2026-01-09 21:05:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130565084519360 | Global setting fallback: max_points = 1.0
2026-01-09 21:05:18 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-130565084519360 | Settings loaded successfully from Project/Global config
2026-01-09 21:05:18 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:473 | Thread-130565084519360 | Cache cleared by user
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-128517400923072 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:05:26 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-128517400923072 | Loaded 0 interpretations from project
2026-01-09 21:05:26 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:365 | Thread-128517400923072 | Inherited attributes from geology: GeologyUnit
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-132423000705984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:06:03 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-132423000705984 | Loaded 0 interpretations from project
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: section_layer = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: section_layer_name = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-132423000705984 | Failed to restore layer for section_layer
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: buffer_dist = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: dem_layer = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: dem_layer_name = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-132423000705984 | Failed to restore layer for dem_layer
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: dem_band = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: scale = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: vert_exag = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: geol_layer = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: geol_layer_name = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-132423000705984 | Failed to restore layer for geol_layer
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: geol_field = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: struct_layer = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: struct_layer_name = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-132423000705984 | Failed to restore layer for struct_layer
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: struct_dip_field = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: struct_strike_field = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: dip_scale_factor = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: dh_collar_layer = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-132423000705984 | Failed to restore layer for dh_collar_layer
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: dh_collar_id = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: dh_use_geom = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: dh_collar_x = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: dh_collar_y = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: dh_collar_z = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: dh_collar_depth = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: dh_survey_layer = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-132423000705984 | Failed to restore layer for dh_survey_layer
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: dh_survey_id = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: dh_survey_depth = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: dh_survey_azim = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: dh_survey_incl = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: dh_interval_layer = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-132423000705984 | Failed to restore layer for dh_interval_layer
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: dh_interval_id = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: dh_interval_from = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: dh_interval_to = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: dh_interval_lith = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: last_output_dir = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: interp_custom_fields = 1.0
2026-01-09 21:06:03 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-132423000705984 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: show_topo = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: show_geol = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: show_struct = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: show_drillholes = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: show_interpretations = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: auto_lod = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: adaptive_sampling = 1.0
2026-01-09 21:06:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132423000705984 | Global setting fallback: max_points = 1.0
2026-01-09 21:06:03 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-132423000705984 | Settings loaded successfully from Project/Global config
2026-01-09 21:06:03 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:473 | Thread-132423000705984 | Cache cleared by user
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-140448642087872 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:11:24 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-140448642087872 | Loaded 0 interpretations from project
2026-01-09 21:11:24 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:365 | Thread-140448642087872 | Inherited attributes from geology: GeologyUnit
2026-01-09 21:12:08 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:08 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-136010413079488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:09 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-136010413079488 | Loaded 0 interpretations from project
2026-01-09 21:12:09 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:365 | Thread-136010413079488 | Inherited attributes from geology: GeologyUnit
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:27 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-129880187407296 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:41 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:41 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:41 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:41 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:41 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:41 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:41 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:41 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:41 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:41 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:41 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:41 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:41 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:41 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:41 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:41 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:41 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:41 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:41 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:41 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:42 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:42 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:42 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:42 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-129848558795712 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:12:42 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-129848558795712 | Loaded 0 interpretations from project
2026-01-09 21:12:42 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:365 | Thread-129848558795712 | Inherited attributes from geology: GeologyUnit
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-128310337665984 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:01 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-128310337665984 | Loaded 0 interpretations from project
2026-01-09 21:13:01 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:365 | Thread-128310337665984 | Inherited attributes from geology: GeologyUnit
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-138446577642432 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:48 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-138446577642432 | Loaded 0 interpretations from project
2026-01-09 21:13:48 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:365 | Thread-138446577642432 | Inherited attributes from geology: GeologyUnit
2026-01-09 21:13:48 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-138446577642432 | Loaded 0 interpretations from project
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: section_layer = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: section_layer_name = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138446577642432 | Failed to restore layer for section_layer
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: buffer_dist = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: dem_layer = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: dem_layer_name = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138446577642432 | Failed to restore layer for dem_layer
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: dem_band = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: scale = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: vert_exag = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: geol_layer = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: geol_layer_name = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138446577642432 | Failed to restore layer for geol_layer
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: geol_field = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: struct_layer = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: struct_layer_name = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138446577642432 | Failed to restore layer for struct_layer
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: struct_dip_field = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: struct_strike_field = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: dip_scale_factor = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: dh_collar_layer = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138446577642432 | Failed to restore layer for dh_collar_layer
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: dh_collar_id = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: dh_use_geom = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: dh_collar_x = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: dh_collar_y = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: dh_collar_z = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: dh_collar_depth = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: dh_survey_layer = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138446577642432 | Failed to restore layer for dh_survey_layer
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: dh_survey_id = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: dh_survey_depth = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: dh_survey_azim = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: dh_survey_incl = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: dh_interval_layer = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138446577642432 | Failed to restore layer for dh_interval_layer
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: dh_interval_id = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: dh_interval_from = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: dh_interval_to = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: dh_interval_lith = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: last_output_dir = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: interp_custom_fields = 1.0
2026-01-09 21:13:48 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-138446577642432 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: show_topo = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: show_geol = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: show_struct = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: show_drillholes = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: show_interpretations = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: auto_lod = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: adaptive_sampling = 1.0
2026-01-09 21:13:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138446577642432 | Global setting fallback: max_points = 1.0
2026-01-09 21:13:48 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-138446577642432 | Settings loaded successfully from Project/Global config
2026-01-09 21:13:48 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:473 | Thread-138446577642432 | Cache cleared by user
2026-01-09 21:13:57 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:57 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:57 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:57 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:57 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:57 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:57 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:57 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:57 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:57 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:57 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:57 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:57 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:57 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:57 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:57 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:57 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:57 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:57 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:57 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:57 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:57 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:57 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-124562765507520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-124562765507520 | Loaded 0 interpretations from project
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:365 | Thread-124562765507520 | Inherited attributes from geology: GeologyUnit
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-124562765507520 | Loaded 0 interpretations from project
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: section_layer = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: section_layer_name = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-124562765507520 | Failed to restore layer for section_layer
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: buffer_dist = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: dem_layer = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: dem_layer_name = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-124562765507520 | Failed to restore layer for dem_layer
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: dem_band = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: scale = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: vert_exag = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: geol_layer = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: geol_layer_name = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-124562765507520 | Failed to restore layer for geol_layer
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: geol_field = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: struct_layer = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: struct_layer_name = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-124562765507520 | Failed to restore layer for struct_layer
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: struct_dip_field = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: struct_strike_field = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: dip_scale_factor = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: dh_collar_layer = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-124562765507520 | Failed to restore layer for dh_collar_layer
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: dh_collar_id = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: dh_use_geom = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: dh_collar_x = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: dh_collar_y = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: dh_collar_z = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: dh_collar_depth = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: dh_survey_layer = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-124562765507520 | Failed to restore layer for dh_survey_layer
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: dh_survey_id = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: dh_survey_depth = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: dh_survey_azim = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: dh_survey_incl = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: dh_interval_layer = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-124562765507520 | Failed to restore layer for dh_interval_layer
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: dh_interval_id = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: dh_interval_from = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: dh_interval_to = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: dh_interval_lith = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: last_output_dir = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: interp_custom_fields = 1.0
2026-01-09 21:13:58 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-124562765507520 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: show_topo = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: show_geol = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: show_struct = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: show_drillholes = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: show_interpretations = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: auto_lod = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: adaptive_sampling = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: max_points = 1.0
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-124562765507520 | Settings loaded successfully from Project/Global config
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:473 | Thread-124562765507520 | Cache cleared by user
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-124562765507520 | GeologyGenerationTask started (Background Thread)
2026-01-09 21:13:58 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-124562765507520 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-124562765507520 | GeologyGenerationTask started (Background Thread)
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-124562765507520 | GeologyGenerationTask finished with 1 segments
2026-01-09 21:13:58 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-124562765507520 | Test Title: Test Message
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-124562765507520 | Test Title: Test Message
2026-01-09 21:13:58 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-124562765507520 | Test Title: Test Message
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-124562765507520 | CRITICAL_OP: finalize_polygon | points=2
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-124562765507520 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-09 21:13:58 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-124562765507520 | finalize_polygon() aborted - less than 3 points
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-124562765507520 | CRITICAL_OP: finalize_polygon | points=3
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-124562765507520 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-124562765507520 | finalize_polygon() - emitting polygonFinished signal for 5055fd25-fa68-4693-a040-7d5b103ec5c2
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-124562765507520 | Interpretation polygon finalized with 3 vertices, ID: 5055fd25-fa68-4693-a040-7d5b103ec5c2
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-124562765507520 | finalize_polygon() completed
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-124562765507520 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-124562765507520 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-124562765507520 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-124562765507520 | ProfileInterpretationTool.reset() completed
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-124562765507520 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-124562765507520 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-124562765507520 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-124562765507520 | ProfileInterpretationTool.reset() completed
2026-01-09 21:13:58 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-124562765507520 | Failed to create locator for layer layer1: mock error
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-124562765507520 | ProfileInterpretationTool.activate() called
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-124562765507520 | ProfileInterpretationTool activated successfully
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-124562765507520 | ProfileInterpretationTool.deactivate() called
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-124562765507520 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-124562765507520 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-124562765507520 | ProfileInterpretationTool.reset() completed
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-124562765507520 | ProfileInterpretationTool deactivated successfully
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: buffer_dist = 100.5
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-124562765507520 | Persistent interpretations cleared by reset
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-124562765507520 | Setting saved to project: test_layer = id_123
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-124562765507520 | Setting saved to project: test_layer_name = RealName
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124562765507520 | Global setting fallback: test_layer = 1.0
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-124562765507520 | Project setting hit: test_layer_name = RealName
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-124562765507520 | Restoring layer: test_layer -> RealName
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-124562765507520 | Point 1 added: 0.00, 0.00
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-124562765507520 | Point 2 added: 100.00, 100.00
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-124562765507520 | Point 1 added: 50.00, 50.00
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-124562765507520 | reset() called, finalized=False
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124562765507520 | finalize_measurement called with 1 points
2026-01-09 21:13:58 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-124562765507520 | Cannot finalize measurement with less than 2 points
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124562765507520 | finalize_measurement called with 2 points
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-124562765507520 | Setting finalized = True
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-124562765507520 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-124562765507520 | Switching to pan tool to stop measurement
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-124562765507520 | Pan tool activated - measurement should be frozen
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-124562765507520 | Ignoring click - measurement is finalized
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124562765507520 | finalize_measurement called with 2 points
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-124562765507520 | Setting finalized = True
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-124562765507520 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-124562765507520 | Switching to pan tool to stop measurement
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-124562765507520 | Pan tool activated - measurement should be frozen
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-124562765507520 | reset() called, finalized=False
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-124562765507520 | reset() called, finalized=False
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-124562765507520 | reset() called, finalized=True
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-124562765507520 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-124562765507520 | reset() called, finalized=False
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124562765507520 | finalize_measurement called with 2 points
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-124562765507520 | Setting finalized = True
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-124562765507520 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-124562765507520 | Rubber band redrawn with final points only
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-124562765507520 | Switching to pan tool to stop measurement
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-124562765507520 | Pan tool activated - measurement should be frozen
2026-01-09 21:13:58 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-124562765507520 | Failed to create locator for layer layer1: mock error
2026-01-09 21:13:58 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-124562765507520 | Failed to create locator for layer l2: fail
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-124562765507520 | ProfileMeasureTool activated
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-124562765507520 | reset() called, finalized=False
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-124562765507520 | ProfileMeasureTool deactivated
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124562765507520 | create_drillhole_trace_layer called with 1 holes
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-124562765507520 | Adding 1 drillhole trace features to layer
2026-01-09 21:13:58 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-124562765507520 | Failed to create memory layer: Fail
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124562765507520 | create_drillhole_trace_layer called with 0 holes
2026-01-09 21:13:58 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-124562765507520 | No drillhole data provided for trace layer
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124562765507520 | create_drillhole_trace_layer called with 1 holes
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-124562765507520 | Skipping hole H1: insufficient trace points (1)
2026-01-09 21:13:58 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-124562765507520 | Adding 0 drillhole trace features to layer
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124562765507520 | create_drillhole_trace_layer called with 1 holes
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124562765507520 | render() called
2026-01-09 21:13:58 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-124562765507520 | No valid layers to render
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124562765507520 | render() called
2026-01-09 21:13:58 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-124562765507520 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124562765507520 | render() called
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124562765507520 | render() called
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124562765507520 | render() called
2026-01-09 21:13:58 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-124562765507520 | No valid layers to render
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124562765507520 | render() called
2026-01-09 21:13:58 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124562765507520 | render() called
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-123697090866112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-123697090866112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-123697090866112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-123697090866112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:135 | Thread-123697090866112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:135 | Thread-123697090866112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-123697090866112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-123697090866112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-123697090866112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-123697090866112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-123697090866112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-123697090866112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-123697090866112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-123697090866112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-123697090866112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-123697090866112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-123697090866112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-123697090866112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-123697090866112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-123697090866112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-123697090866112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-123697090866112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-123697090866112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123697090866112 | Config set: SecInterp/scale = 50000.0
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123697090866112 | Config set: SecInterp/vert_exag = 1.0
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123697090866112 | Config set: SecInterp/buffer_dist = 100.0
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123697090866112 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123697090866112 | Config set: SecInterp/last_output_dir = 
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123697090866112 | Config set: SecInterp/dpi = 300
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123697090866112 | Config set: SecInterp/preview_width = 800
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123697090866112 | Config set: SecInterp/preview_height = 600
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123697090866112 | Config set: SecInterp/sampling_interval = 10.0
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123697090866112 | Config set: SecInterp/export_quality = 95
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123697090866112 | Config set: SecInterp/auto_lod = True
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123697090866112 | Config set: SecInterp/max_preview_points = 10000
2026-01-09 21:14:31 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-123697090866112 | Configuration reset to defaults
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123697090866112 | Config set: SecInterp/scale = 200.0
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123697090866112 | CacheService initialized (Default TTL: 3600s)
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123697090866112 | CacheService initialized (Default TTL: 3600s)
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123697090866112 | CacheService initialized (Default TTL: 3600s)
2026-01-09 21:14:31 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-123697090866112 | Projecting collars from Test Layer with buffer 50.0m
2026-01-09 21:14:31 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-123697090866112 | No collars found within buffer area.
2026-01-09 21:14:31 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-123697090866112 | Projecting collars from Test Layer with buffer 50.0m
2026-01-09 21:14:31 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-123697090866112 | DrillholeService.project_collars END: Found 1 collars.
2026-01-09 21:14:31 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-123697090866112 | ✓ Saving profile axes...
2026-01-09 21:14:31 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-123697090866112 | ✓ Saving topographic profile...
2026-01-09 21:14:31 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-123697090866112 | ✓ Saving profile axes...
2026-01-09 21:14:31 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-123697090866112 | ✓ Saving interpretation data...
2026-01-09 21:14:31 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:253 | Thread-123697090866112 | 3D Export features are restricted for this user.
2026-01-09 21:14:31 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-123697090866112 | ✓ Saving topographic profile...
2026-01-09 21:14:31 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-123697090866112 | ✓ Saving profile axes...
2026-01-09 21:14:31 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-123697090866112 | ✓ Saving interpretation data...
2026-01-09 21:14:31 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:236 | Thread-123697090866112 | ✓ Saving 3D interpretation data...
2026-01-09 21:14:31 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-123697090866112 | ✓ Saving topographic profile...
2026-01-09 21:14:31 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-123697090866112 | ✓ Saving profile axes...
2026-01-09 21:14:31 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:134 | Thread-123697090866112 | ✓ Saving geological profile...
2026-01-09 21:14:31 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:162 | Thread-123697090866112 | ✓ Saving structural profile...
2026-01-09 21:14:31 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:198 | Thread-123697090866112 | ✓ Saving drillhole data...
2026-01-09 21:14:31 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-123697090866112 | ✓ Saving interpretation data...
2026-01-09 21:14:31 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-123697090866112 | Access denied for restricted feature: 3D Export
2026-01-09 21:14:31 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:253 | Thread-123697090866112 | 3D Export features are restricted for this user.
2026-01-09 21:14:31 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-123697090866112 | ✓ Saving topographic profile...
2026-01-09 21:14:31 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-123697090866112 | ✓ Saving profile axes...
2026-01-09 21:14:31 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:220 | Thread-123697090866112 | No interpretations provided for export.
2026-01-09 21:14:31 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:198 | Thread-123697090866112 | ✓ Saving drillhole data...
2026-01-09 21:14:31 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:134 | Thread-123697090866112 | ✓ Saving geological profile...
2026-01-09 21:14:31 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-123697090866112 | ✓ Saving interpretation data...
2026-01-09 21:14:31 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:236 | Thread-123697090866112 | ✓ Saving 3D interpretation data...
2026-01-09 21:14:31 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:251 | Thread-123697090866112 | Invalid section line layer, skipping 3D export.
2026-01-09 21:14:31 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-123697090866112 | ✓ Saving interpretation data...
2026-01-09 21:14:31 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:162 | Thread-123697090866112 | ✓ Saving structural profile...
2026-01-09 21:14:31 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-123697090866112 | ✓ Saving topographic profile...
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-123697090866112 | Generating master profile with interval=10.00
2026-01-09 21:14:31 | WARNING  | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:308 | Thread-123697090866112 | Failed to generate master grid: Expected LineGeometry, got <MagicMock name='mock.core.QgsWkbTypes.geometryType()' id='123697066116832'>
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-123697090866112 | Generating master profile with interval=50.00
2026-01-09 21:14:31 | WARNING  | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:308 | Thread-123697090866112 | Failed to generate master grid: Expected LineGeometry, got <MagicMock name='mock.core.QgsWkbTypes.geometryType()' id='123697066119520'>
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-123697090866112 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-123697090866112 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-123697090866112 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-123697090866112 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-123697090866112 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-09 21:14:31 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-123697090866112 | Running geometry operation: test
2026-01-09 21:14:32 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-123697090866112 | Generated 1 drillhole traces
2026-01-09 21:14:32 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-123697090866112 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-09 21:14:32 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-123697090866112 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-09 21:14:32 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-123697090866112 | Generated 1 drillhole traces
2026-01-09 21:14:32 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-123697090866112 | Drillhole preview skipped: No Collar ID field selected.
2026-01-09 21:14:32 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-123697090866112 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 21:14:32 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-123697090866112 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 21:14:32 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-123697090866112 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 21:14:32 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-123697090866112 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 21:14:32 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-123697090866112 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-09 21:14:32 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-123697090866112 | Analyzing structures in Structure Layer with buffer 10m
2026-01-09 21:14:32 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-123697090866112 | Processed 1 structural measurements from Structure Layer
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-131564518255552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-131564518255552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-131564518255552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-131564518255552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:135 | Thread-131564518255552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:135 | Thread-131564518255552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-131564518255552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-131564518255552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-131564518255552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-131564518255552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-131564518255552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-131564518255552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-131564518255552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-131564518255552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-131564518255552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-131564518255552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-131564518255552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-131564518255552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-131564518255552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-131564518255552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-131564518255552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-131564518255552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-131564518255552 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131564518255552 | Config set: SecInterp/scale = 50000.0
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131564518255552 | Config set: SecInterp/vert_exag = 1.0
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131564518255552 | Config set: SecInterp/buffer_dist = 100.0
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131564518255552 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131564518255552 | Config set: SecInterp/last_output_dir = 
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131564518255552 | Config set: SecInterp/dpi = 300
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131564518255552 | Config set: SecInterp/preview_width = 800
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131564518255552 | Config set: SecInterp/preview_height = 600
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131564518255552 | Config set: SecInterp/sampling_interval = 10.0
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131564518255552 | Config set: SecInterp/export_quality = 95
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131564518255552 | Config set: SecInterp/auto_lod = True
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131564518255552 | Config set: SecInterp/max_preview_points = 10000
2026-01-09 21:15:00 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-131564518255552 | Configuration reset to defaults
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131564518255552 | Config set: SecInterp/scale = 200.0
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131564518255552 | CacheService initialized (Default TTL: 3600s)
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131564518255552 | CacheService initialized (Default TTL: 3600s)
2026-01-09 21:15:00 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131564518255552 | CacheService initialized (Default TTL: 3600s)
2026-01-09 21:15:00 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-131564518255552 | Projecting collars from Test Layer with buffer 50.0m
2026-01-09 21:15:00 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-131564518255552 | No collars found within buffer area.
2026-01-09 21:15:00 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-131564518255552 | Projecting collars from Test Layer with buffer 50.0m
2026-01-09 21:15:00 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-131564518255552 | DrillholeService.project_collars END: Found 1 collars.
2026-01-09 21:15:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-131564518255552 | ✓ Saving profile axes...
2026-01-09 21:15:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-131564518255552 | ✓ Saving topographic profile...
2026-01-09 21:15:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-131564518255552 | ✓ Saving profile axes...
2026-01-09 21:15:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-131564518255552 | ✓ Saving interpretation data...
2026-01-09 21:15:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:253 | Thread-131564518255552 | 3D Export features are restricted for this user.
2026-01-09 21:15:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-131564518255552 | ✓ Saving topographic profile...
2026-01-09 21:15:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-131564518255552 | ✓ Saving profile axes...
2026-01-09 21:15:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-131564518255552 | ✓ Saving interpretation data...
2026-01-09 21:15:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:236 | Thread-131564518255552 | ✓ Saving 3D interpretation data...
2026-01-09 21:15:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-131564518255552 | ✓ Saving topographic profile...
2026-01-09 21:15:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-131564518255552 | ✓ Saving profile axes...
2026-01-09 21:15:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:134 | Thread-131564518255552 | ✓ Saving geological profile...
2026-01-09 21:15:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:162 | Thread-131564518255552 | ✓ Saving structural profile...
2026-01-09 21:15:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:198 | Thread-131564518255552 | ✓ Saving drillhole data...
2026-01-09 21:15:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-131564518255552 | ✓ Saving interpretation data...
2026-01-09 21:15:01 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-131564518255552 | Access denied for restricted feature: 3D Export
2026-01-09 21:15:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:253 | Thread-131564518255552 | 3D Export features are restricted for this user.
2026-01-09 21:15:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-131564518255552 | ✓ Saving topographic profile...
2026-01-09 21:15:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-131564518255552 | ✓ Saving profile axes...
2026-01-09 21:15:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:220 | Thread-131564518255552 | No interpretations provided for export.
2026-01-09 21:15:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:198 | Thread-131564518255552 | ✓ Saving drillhole data...
2026-01-09 21:15:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:134 | Thread-131564518255552 | ✓ Saving geological profile...
2026-01-09 21:15:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-131564518255552 | ✓ Saving interpretation data...
2026-01-09 21:15:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:236 | Thread-131564518255552 | ✓ Saving 3D interpretation data...
2026-01-09 21:15:01 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:251 | Thread-131564518255552 | Invalid section line layer, skipping 3D export.
2026-01-09 21:15:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-131564518255552 | ✓ Saving interpretation data...
2026-01-09 21:15:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:162 | Thread-131564518255552 | ✓ Saving structural profile...
2026-01-09 21:15:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-131564518255552 | ✓ Saving topographic profile...
2026-01-09 21:15:01 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-131564518255552 | Generating master profile with interval=10.00
2026-01-09 21:15:01 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-131564518255552 | Generating master profile with interval=50.00
2026-01-09 21:15:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-131564518255552 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-09 21:15:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-131564518255552 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-09 21:15:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-131564518255552 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-09 21:15:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-131564518255552 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-09 21:15:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-131564518255552 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-09 21:15:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-131564518255552 | Running geometry operation: test
2026-01-09 21:15:01 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-131564518255552 | Generated 1 drillhole traces
2026-01-09 21:15:01 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-131564518255552 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-09 21:15:01 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-131564518255552 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-09 21:15:01 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-131564518255552 | Generated 1 drillhole traces
2026-01-09 21:15:01 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-131564518255552 | Drillhole preview skipped: No Collar ID field selected.
2026-01-09 21:15:01 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-131564518255552 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 21:15:01 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-131564518255552 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 21:15:01 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-131564518255552 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 21:15:01 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-131564518255552 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 21:15:01 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-131564518255552 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-09 21:15:01 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-131564518255552 | Analyzing structures in Structure Layer with buffer 10m
2026-01-09 21:15:01 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-131564518255552 | Processed 1 structural measurements from Structure Layer
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:28:38 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-138334470732736 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:29 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:29 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:29 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:29 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:29 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:29 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:29 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:29 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:29 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:29 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:29 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:29 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:29 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:29 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:29 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:29 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:29 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:29 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:29 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:29 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:135 | Thread-139914988272576 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-139914988272576 | Config set: SecInterp/scale = 50000.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-139914988272576 | Config set: SecInterp/vert_exag = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-139914988272576 | Config set: SecInterp/buffer_dist = 100.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-139914988272576 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-139914988272576 | Config set: SecInterp/last_output_dir = 
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-139914988272576 | Config set: SecInterp/dpi = 300
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-139914988272576 | Config set: SecInterp/preview_width = 800
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-139914988272576 | Config set: SecInterp/preview_height = 600
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-139914988272576 | Config set: SecInterp/sampling_interval = 10.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-139914988272576 | Config set: SecInterp/export_quality = 95
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-139914988272576 | Config set: SecInterp/auto_lod = True
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-139914988272576 | Config set: SecInterp/max_preview_points = 10000
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-139914988272576 | Configuration reset to defaults
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-139914988272576 | Config set: SecInterp/scale = 200.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139914988272576 | CacheService initialized (Default TTL: 3600s)
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139914988272576 | CacheService initialized (Default TTL: 3600s)
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139914988272576 | CacheService initialized (Default TTL: 3600s)
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-139914988272576 | Projecting collars from Test Layer with buffer 50.0m
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-139914988272576 | No collars found within buffer area.
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-139914988272576 | Projecting collars from Test Layer with buffer 50.0m
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-139914988272576 | DrillholeService.project_collars END: Found 1 collars.
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-139914988272576 | ✓ Saving profile axes...
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-139914988272576 | ✓ Saving topographic profile...
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-139914988272576 | ✓ Saving profile axes...
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-139914988272576 | ✓ Saving interpretation data...
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:253 | Thread-139914988272576 | 3D Export features are restricted for this user.
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-139914988272576 | ✓ Saving topographic profile...
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-139914988272576 | ✓ Saving profile axes...
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-139914988272576 | ✓ Saving interpretation data...
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:236 | Thread-139914988272576 | ✓ Saving 3D interpretation data...
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-139914988272576 | ✓ Saving topographic profile...
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-139914988272576 | ✓ Saving profile axes...
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:134 | Thread-139914988272576 | ✓ Saving geological profile...
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:162 | Thread-139914988272576 | ✓ Saving structural profile...
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:198 | Thread-139914988272576 | ✓ Saving drillhole data...
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-139914988272576 | ✓ Saving interpretation data...
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-139914988272576 | Access denied for restricted feature: 3D Export
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:253 | Thread-139914988272576 | 3D Export features are restricted for this user.
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-139914988272576 | ✓ Saving topographic profile...
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-139914988272576 | ✓ Saving profile axes...
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:220 | Thread-139914988272576 | No interpretations provided for export.
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:198 | Thread-139914988272576 | ✓ Saving drillhole data...
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:134 | Thread-139914988272576 | ✓ Saving geological profile...
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-139914988272576 | ✓ Saving interpretation data...
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:236 | Thread-139914988272576 | ✓ Saving 3D interpretation data...
2026-01-09 21:31:30 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:251 | Thread-139914988272576 | Invalid section line layer, skipping 3D export.
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-139914988272576 | ✓ Saving interpretation data...
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:162 | Thread-139914988272576 | ✓ Saving structural profile...
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-139914988272576 | ✓ Saving topographic profile...
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-139914988272576 | Generating master profile with interval=10.00
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-139914988272576 | Generating master profile with interval=50.00
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-139914988272576 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-139914988272576 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-139914988272576 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-139914988272576 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-139914988272576 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-139914988272576 | Running geometry operation: test
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-139914988272576 | Generated 1 drillhole traces
2026-01-09 21:31:30 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-139914988272576 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-09 21:31:30 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-139914988272576 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-139914988272576 | Generated 1 drillhole traces
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-139914988272576 | Drillhole preview skipped: No Collar ID field selected.
2026-01-09 21:31:30 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-139914988272576 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 21:31:30 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-139914988272576 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 21:31:30 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-139914988272576 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 21:31:30 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-139914988272576 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 21:31:30 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-139914988272576 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-139914988272576 | Analyzing structures in Structure Layer with buffer 10m
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-139914988272576 | Processed 1 structural measurements from Structure Layer
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-139914988272576 | Successfully exported to /tmp/test_dynamic.shp
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-139914988272576 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-139914988272576 | Generated QML style: /tmp/test.qml
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-139914988272576 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-139914988272576 | Generated QML style: dummy.qml
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-139914988272576 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-139914988272576 | Generated QML style: dummy.qml
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-139914988272576 | Loaded 0 interpretations from project
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:365 | Thread-139914988272576 | Inherited attributes from geology: GeologyUnit
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-139914988272576 | Loaded 0 interpretations from project
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: section_layer = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: section_layer_name = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-139914988272576 | Failed to restore layer for section_layer
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: buffer_dist = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: dem_layer = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: dem_layer_name = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-139914988272576 | Failed to restore layer for dem_layer
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: dem_band = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: scale = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: vert_exag = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: geol_layer = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: geol_layer_name = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-139914988272576 | Failed to restore layer for geol_layer
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: geol_field = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: struct_layer = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: struct_layer_name = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-139914988272576 | Failed to restore layer for struct_layer
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: struct_dip_field = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: struct_strike_field = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: dip_scale_factor = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: dh_collar_layer = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-139914988272576 | Failed to restore layer for dh_collar_layer
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: dh_collar_id = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: dh_use_geom = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: dh_collar_x = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: dh_collar_y = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: dh_collar_z = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: dh_collar_depth = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: dh_survey_layer = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-139914988272576 | Failed to restore layer for dh_survey_layer
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: dh_survey_id = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: dh_survey_depth = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: dh_survey_azim = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: dh_survey_incl = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: dh_interval_layer = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-139914988272576 | Failed to restore layer for dh_interval_layer
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: dh_interval_id = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: dh_interval_from = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: dh_interval_to = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: dh_interval_lith = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: last_output_dir = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: interp_custom_fields = 1.0
2026-01-09 21:31:30 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-139914988272576 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: show_topo = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: show_geol = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: show_struct = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: show_drillholes = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: show_interpretations = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: auto_lod = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: adaptive_sampling = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: max_points = 1.0
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-139914988272576 | Settings loaded successfully from Project/Global config
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:473 | Thread-139914988272576 | Cache cleared by user
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-139914988272576 | GeologyGenerationTask started (Background Thread)
2026-01-09 21:31:30 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-139914988272576 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-139914988272576 | GeologyGenerationTask started (Background Thread)
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-139914988272576 | GeologyGenerationTask finished with 1 segments
2026-01-09 21:31:30 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-139914988272576 | Test Title: Test Message
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-139914988272576 | Test Title: Test Message
2026-01-09 21:31:30 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-139914988272576 | Test Title: Test Message
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-139914988272576 | CRITICAL_OP: finalize_polygon | points=2
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-139914988272576 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-09 21:31:30 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-139914988272576 | finalize_polygon() aborted - less than 3 points
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-139914988272576 | CRITICAL_OP: finalize_polygon | points=3
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-139914988272576 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-139914988272576 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-139914988272576 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-139914988272576 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-139914988272576 | ProfileInterpretationTool.reset() completed
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-139914988272576 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-139914988272576 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-139914988272576 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-139914988272576 | ProfileInterpretationTool.reset() completed
2026-01-09 21:31:30 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-139914988272576 | Failed to create locator for layer layer1: mock error
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-139914988272576 | ProfileInterpretationTool.activate() called
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-139914988272576 | ProfileInterpretationTool activated successfully
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-139914988272576 | ProfileInterpretationTool.deactivate() called
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-139914988272576 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-139914988272576 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-139914988272576 | ProfileInterpretationTool.reset() completed
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-139914988272576 | ProfileInterpretationTool deactivated successfully
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: buffer_dist = 100.5
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-139914988272576 | Persistent interpretations cleared by reset
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-139914988272576 | Setting saved to project: test_layer = id_123
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-139914988272576 | Setting saved to project: test_layer_name = RealName
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: test_layer = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-139914988272576 | Project setting hit: test_layer_name = RealName
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-139914988272576 | Restoring layer: test_layer -> RealName
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-139914988272576 | Point 1 added: 0.00, 0.00
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-139914988272576 | Point 2 added: 100.00, 100.00
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-139914988272576 | Point 1 added: 50.00, 50.00
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-139914988272576 | reset() called, finalized=False
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-139914988272576 | finalize_measurement called with 1 points
2026-01-09 21:31:30 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-139914988272576 | Cannot finalize measurement with less than 2 points
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-139914988272576 | finalize_measurement called with 2 points
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-139914988272576 | Setting finalized = True
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-139914988272576 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-139914988272576 | Switching to pan tool to stop measurement
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-139914988272576 | Pan tool activated - measurement should be frozen
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-139914988272576 | Ignoring click - measurement is finalized
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-139914988272576 | finalize_measurement called with 2 points
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-139914988272576 | Setting finalized = True
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-139914988272576 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-139914988272576 | Switching to pan tool to stop measurement
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-139914988272576 | Pan tool activated - measurement should be frozen
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-139914988272576 | reset() called, finalized=False
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-139914988272576 | reset() called, finalized=False
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-139914988272576 | reset() called, finalized=True
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-139914988272576 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-139914988272576 | reset() called, finalized=False
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-139914988272576 | finalize_measurement called with 2 points
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-139914988272576 | Setting finalized = True
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-139914988272576 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-139914988272576 | Rubber band redrawn with final points only
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-139914988272576 | Switching to pan tool to stop measurement
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-139914988272576 | Pan tool activated - measurement should be frozen
2026-01-09 21:31:30 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-139914988272576 | Failed to create locator for layer layer1: mock error
2026-01-09 21:31:30 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-139914988272576 | Failed to create locator for layer l2: fail
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-139914988272576 | ProfileMeasureTool activated
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-139914988272576 | reset() called, finalized=False
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-139914988272576 | ProfileMeasureTool deactivated
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139914988272576 | create_drillhole_trace_layer called with 1 holes
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-139914988272576 | Adding 1 drillhole trace features to layer
2026-01-09 21:31:30 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-139914988272576 | Failed to create memory layer: Fail
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139914988272576 | create_drillhole_trace_layer called with 0 holes
2026-01-09 21:31:30 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-139914988272576 | No drillhole data provided for trace layer
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139914988272576 | create_drillhole_trace_layer called with 1 holes
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-139914988272576 | Skipping hole H1: insufficient trace points (1)
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-139914988272576 | Adding 0 drillhole trace features to layer
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139914988272576 | create_drillhole_trace_layer called with 1 holes
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139914988272576 | render() called
2026-01-09 21:31:30 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-139914988272576 | No valid layers to render
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139914988272576 | render() called
2026-01-09 21:31:30 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-139914988272576 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139914988272576 | render() called
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139914988272576 | render() called
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139914988272576 | render() called
2026-01-09 21:31:30 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-139914988272576 | No valid layers to render
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139914988272576 | render() called
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139914988272576 | render() called
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-139914988272576 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-139914988272576 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139914988272576 | CacheService initialized (Default TTL: 3600s)
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-139914988272576 | ProfileController initialized
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-139914988272576 | Loaded 0 interpretations from project
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: buffer_dist = 100.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: scale = 50000.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: vert_exag = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: dip_scale_factor = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: auto_lod = True
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-139914988272576 | Settings loaded successfully from Project/Global config
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:536 | Thread-139914988272576 | Saved 1 interpretations to project
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139914988272576 | CacheService initialized (Default TTL: 3600s)
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-139914988272576 | ProfileController initialized
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-139914988272576 | Loaded 0 interpretations from project
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: buffer_dist = 100.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: scale = 50000.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: vert_exag = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: dip_scale_factor = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: auto_lod = True
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-139914988272576 | Settings loaded successfully from Project/Global config
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:536 | Thread-139914988272576 | Saved 1 interpretations to project
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:536 | Thread-139914988272576 | Saved 0 interpretations to project
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139914988272576 | CacheService initialized (Default TTL: 3600s)
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-139914988272576 | ProfileController initialized
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-139914988272576 | Loaded 0 interpretations from project
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: buffer_dist = 100.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: scale = 50000.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: vert_exag = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: dip_scale_factor = 1.0
2026-01-09 21:31:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: auto_lod = True
2026-01-09 21:31:30 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-139914988272576 | Settings loaded successfully from Project/Global config
2026-01-09 21:31:31 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-139914988272576 | Loaded 1 interpretations from project
2026-01-09 21:31:31 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-139914988272576 | Point 1 added: 0.00, 0.00
2026-01-09 21:31:31 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-139914988272576 | Point 2 added: 10.00, 10.00
2026-01-09 21:31:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-139914988272576 | finalize_measurement called with 2 points
2026-01-09 21:31:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-139914988272576 | Setting finalized = True
2026-01-09 21:31:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-139914988272576 | Measurement finalized: 2 points, 14.14m total distance
2026-01-09 21:31:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-139914988272576 | Rubber band redrawn with final points only
2026-01-09 21:31:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-139914988272576 | Switching to pan tool to stop measurement
2026-01-09 21:31:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-139914988272576 | Pan tool activated - measurement should be frozen
2026-01-09 21:31:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-139914988272576 | reset() called, finalized=True
2026-01-09 21:31:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-139914988272576 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-09 21:31:31 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-139914988272576 | Point 1 added: 0.00, 0.00
2026-01-09 21:31:31 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-139914988272576 | Point 2 added: 100.00, 100.00
2026-01-09 21:31:31 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139914988272576 | CacheService initialized (Default TTL: 3600s)
2026-01-09 21:31:31 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-139914988272576 | ProfileController initialized
2026-01-09 21:31:31 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-139914988272576 | Loaded 1 interpretations from project
2026-01-09 21:31:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: buffer_dist = 100.0
2026-01-09 21:31:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: scale = 50000.0
2026-01-09 21:31:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: vert_exag = 1.0
2026-01-09 21:31:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: dip_scale_factor = 1.0
2026-01-09 21:31:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139914988272576 | Global setting fallback: auto_lod = True
2026-01-09 21:31:31 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-139914988272576 | Settings loaded successfully from Project/Global config
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-138073362852800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-138073362852800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-138073362852800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-138073362852800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:135 | Thread-138073362852800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:135 | Thread-138073362852800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-138073362852800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-138073362852800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-138073362852800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-138073362852800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-138073362852800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-138073362852800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-138073362852800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-138073362852800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-138073362852800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-138073362852800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-138073362852800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-138073362852800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-138073362852800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-138073362852800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-138073362852800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-138073362852800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-138073362852800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138073362852800 | Config set: SecInterp/scale = 50000.0
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138073362852800 | Config set: SecInterp/vert_exag = 1.0
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138073362852800 | Config set: SecInterp/buffer_dist = 100.0
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138073362852800 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138073362852800 | Config set: SecInterp/last_output_dir = 
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138073362852800 | Config set: SecInterp/dpi = 300
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138073362852800 | Config set: SecInterp/preview_width = 800
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138073362852800 | Config set: SecInterp/preview_height = 600
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138073362852800 | Config set: SecInterp/sampling_interval = 10.0
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138073362852800 | Config set: SecInterp/export_quality = 95
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138073362852800 | Config set: SecInterp/auto_lod = True
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138073362852800 | Config set: SecInterp/max_preview_points = 10000
2026-01-09 21:32:24 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-138073362852800 | Configuration reset to defaults
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138073362852800 | Config set: SecInterp/scale = 200.0
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138073362852800 | CacheService initialized (Default TTL: 3600s)
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138073362852800 | CacheService initialized (Default TTL: 3600s)
2026-01-09 21:32:24 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138073362852800 | CacheService initialized (Default TTL: 3600s)
2026-01-09 21:32:24 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-138073362852800 | Projecting collars from Test Layer with buffer 50.0m
2026-01-09 21:32:24 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-138073362852800 | No collars found within buffer area.
2026-01-09 21:32:24 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-138073362852800 | Projecting collars from Test Layer with buffer 50.0m
2026-01-09 21:32:24 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-138073362852800 | DrillholeService.project_collars END: Found 1 collars.
2026-01-09 21:32:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-138073362852800 | ✓ Saving profile axes...
2026-01-09 21:32:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-138073362852800 | ✓ Saving topographic profile...
2026-01-09 21:32:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-138073362852800 | ✓ Saving profile axes...
2026-01-09 21:32:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-138073362852800 | ✓ Saving interpretation data...
2026-01-09 21:32:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:253 | Thread-138073362852800 | 3D Export features are restricted for this user.
2026-01-09 21:32:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-138073362852800 | ✓ Saving topographic profile...
2026-01-09 21:32:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-138073362852800 | ✓ Saving profile axes...
2026-01-09 21:32:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-138073362852800 | ✓ Saving interpretation data...
2026-01-09 21:32:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:236 | Thread-138073362852800 | ✓ Saving 3D interpretation data...
2026-01-09 21:32:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-138073362852800 | ✓ Saving topographic profile...
2026-01-09 21:32:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-138073362852800 | ✓ Saving profile axes...
2026-01-09 21:32:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:134 | Thread-138073362852800 | ✓ Saving geological profile...
2026-01-09 21:32:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:162 | Thread-138073362852800 | ✓ Saving structural profile...
2026-01-09 21:32:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:198 | Thread-138073362852800 | ✓ Saving drillhole data...
2026-01-09 21:32:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-138073362852800 | ✓ Saving interpretation data...
2026-01-09 21:32:24 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-138073362852800 | Access denied for restricted feature: 3D Export
2026-01-09 21:32:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:253 | Thread-138073362852800 | 3D Export features are restricted for this user.
2026-01-09 21:32:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-138073362852800 | ✓ Saving topographic profile...
2026-01-09 21:32:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:262 | Thread-138073362852800 | ✓ Saving profile axes...
2026-01-09 21:32:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:220 | Thread-138073362852800 | No interpretations provided for export.
2026-01-09 21:32:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:198 | Thread-138073362852800 | ✓ Saving drillhole data...
2026-01-09 21:32:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:134 | Thread-138073362852800 | ✓ Saving geological profile...
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-138073362852800 | ✓ Saving interpretation data...
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:236 | Thread-138073362852800 | ✓ Saving 3D interpretation data...
2026-01-09 21:32:25 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:251 | Thread-138073362852800 | Invalid section line layer, skipping 3D export.
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:224 | Thread-138073362852800 | ✓ Saving interpretation data...
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:162 | Thread-138073362852800 | ✓ Saving structural profile...
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:114 | Thread-138073362852800 | ✓ Saving topographic profile...
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-138073362852800 | Generating master profile with interval=10.00
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-138073362852800 | Generating master profile with interval=50.00
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-138073362852800 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-138073362852800 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-138073362852800 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-138073362852800 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-138073362852800 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-138073362852800 | Running geometry operation: test
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-138073362852800 | Generated 1 drillhole traces
2026-01-09 21:32:25 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-138073362852800 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-09 21:32:25 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-138073362852800 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-138073362852800 | Generated 1 drillhole traces
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-138073362852800 | Drillhole preview skipped: No Collar ID field selected.
2026-01-09 21:32:25 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-138073362852800 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 21:32:25 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-138073362852800 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 21:32:25 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-138073362852800 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 21:32:25 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-138073362852800 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 21:32:25 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-138073362852800 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-138073362852800 | Analyzing structures in Structure Layer with buffer 10m
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-138073362852800 | Processed 1 structural measurements from Structure Layer
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-139464546839488 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-139464546839488 | Loaded 0 interpretations from project
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:365 | Thread-139464546839488 | Inherited attributes from geology: GeologyUnit
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:561 | Thread-139464546839488 | Loaded 0 interpretations from project
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: section_layer = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: section_layer_name = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-139464546839488 | Failed to restore layer for section_layer
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: buffer_dist = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: dem_layer = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: dem_layer_name = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-139464546839488 | Failed to restore layer for dem_layer
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: dem_band = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: scale = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: vert_exag = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: geol_layer = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: geol_layer_name = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-139464546839488 | Failed to restore layer for geol_layer
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: geol_field = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: struct_layer = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: struct_layer_name = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-139464546839488 | Failed to restore layer for struct_layer
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: struct_dip_field = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: struct_strike_field = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: dip_scale_factor = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: dh_collar_layer = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-139464546839488 | Failed to restore layer for dh_collar_layer
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: dh_collar_id = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: dh_use_geom = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: dh_collar_x = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: dh_collar_y = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: dh_collar_z = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: dh_collar_depth = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: dh_survey_layer = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-139464546839488 | Failed to restore layer for dh_survey_layer
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: dh_survey_id = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: dh_survey_depth = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: dh_survey_azim = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: dh_survey_incl = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: dh_interval_layer = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-139464546839488 | Failed to restore layer for dh_interval_layer
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: dh_interval_id = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: dh_interval_from = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: dh_interval_to = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: dh_interval_lith = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: last_output_dir = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: interp_custom_fields = 1.0
2026-01-09 21:32:25 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-139464546839488 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: show_topo = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: show_geol = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: show_struct = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: show_drillholes = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: show_interpretations = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: auto_lod = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: adaptive_sampling = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: max_points = 1.0
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-139464546839488 | Settings loaded successfully from Project/Global config
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:473 | Thread-139464546839488 | Cache cleared by user
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-139464546839488 | GeologyGenerationTask started (Background Thread)
2026-01-09 21:32:25 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-139464546839488 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-139464546839488 | GeologyGenerationTask started (Background Thread)
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-139464546839488 | GeologyGenerationTask finished with 1 segments
2026-01-09 21:32:25 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-139464546839488 | Test Title: Test Message
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-139464546839488 | Test Title: Test Message
2026-01-09 21:32:25 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-139464546839488 | Test Title: Test Message
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-139464546839488 | CRITICAL_OP: finalize_polygon | points=2
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-139464546839488 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-09 21:32:25 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-139464546839488 | finalize_polygon() aborted - less than 3 points
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-139464546839488 | CRITICAL_OP: finalize_polygon | points=3
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-139464546839488 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-139464546839488 | finalize_polygon() - emitting polygonFinished signal for a440b697-ab38-4efb-8474-d8858cad09e5
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-139464546839488 | Interpretation polygon finalized with 3 vertices, ID: a440b697-ab38-4efb-8474-d8858cad09e5
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-139464546839488 | finalize_polygon() completed
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-139464546839488 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-139464546839488 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-139464546839488 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-139464546839488 | ProfileInterpretationTool.reset() completed
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:168 | Thread-139464546839488 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-139464546839488 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-139464546839488 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-139464546839488 | ProfileInterpretationTool.reset() completed
2026-01-09 21:32:25 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-139464546839488 | Failed to create locator for layer layer1: mock error
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-139464546839488 | ProfileInterpretationTool.activate() called
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-139464546839488 | ProfileInterpretationTool activated successfully
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-139464546839488 | ProfileInterpretationTool.deactivate() called
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-139464546839488 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-139464546839488 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-139464546839488 | ProfileInterpretationTool.reset() completed
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-139464546839488 | ProfileInterpretationTool deactivated successfully
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: buffer_dist = 100.5
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-139464546839488 | Persistent interpretations cleared by reset
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-139464546839488 | Setting saved to project: test_layer = id_123
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-139464546839488 | Setting saved to project: test_layer_name = RealName
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139464546839488 | Global setting fallback: test_layer = 1.0
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-139464546839488 | Project setting hit: test_layer_name = RealName
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-139464546839488 | Restoring layer: test_layer -> RealName
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-139464546839488 | Point 1 added: 0.00, 0.00
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-139464546839488 | Point 2 added: 100.00, 100.00
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-139464546839488 | Point 1 added: 50.00, 50.00
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-139464546839488 | reset() called, finalized=False
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-139464546839488 | finalize_measurement called with 1 points
2026-01-09 21:32:25 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-139464546839488 | Cannot finalize measurement with less than 2 points
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-139464546839488 | finalize_measurement called with 2 points
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-139464546839488 | Setting finalized = True
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-139464546839488 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-139464546839488 | Switching to pan tool to stop measurement
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-139464546839488 | Pan tool activated - measurement should be frozen
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-139464546839488 | Ignoring click - measurement is finalized
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-139464546839488 | finalize_measurement called with 2 points
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-139464546839488 | Setting finalized = True
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-139464546839488 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-139464546839488 | Switching to pan tool to stop measurement
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-139464546839488 | Pan tool activated - measurement should be frozen
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-139464546839488 | reset() called, finalized=False
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-139464546839488 | reset() called, finalized=False
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-139464546839488 | reset() called, finalized=True
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-139464546839488 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-139464546839488 | reset() called, finalized=False
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-139464546839488 | finalize_measurement called with 2 points
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-139464546839488 | Setting finalized = True
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-139464546839488 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-139464546839488 | Rubber band redrawn with final points only
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-139464546839488 | Switching to pan tool to stop measurement
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-139464546839488 | Pan tool activated - measurement should be frozen
2026-01-09 21:32:25 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-139464546839488 | Failed to create locator for layer layer1: mock error
2026-01-09 21:32:25 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-139464546839488 | Failed to create locator for layer l2: fail
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-139464546839488 | ProfileMeasureTool activated
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-139464546839488 | reset() called, finalized=False
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-139464546839488 | ProfileMeasureTool deactivated
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139464546839488 | create_drillhole_trace_layer called with 1 holes
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-139464546839488 | Adding 1 drillhole trace features to layer
2026-01-09 21:32:25 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-139464546839488 | Failed to create memory layer: Fail
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139464546839488 | create_drillhole_trace_layer called with 0 holes
2026-01-09 21:32:25 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-139464546839488 | No drillhole data provided for trace layer
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139464546839488 | create_drillhole_trace_layer called with 1 holes
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-139464546839488 | Skipping hole H1: insufficient trace points (1)
2026-01-09 21:32:25 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-139464546839488 | Adding 0 drillhole trace features to layer
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139464546839488 | create_drillhole_trace_layer called with 1 holes
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139464546839488 | render() called
2026-01-09 21:32:25 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-139464546839488 | No valid layers to render
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139464546839488 | render() called
2026-01-09 21:32:25 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:211 | Thread-139464546839488 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 188, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139464546839488 | render() called
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139464546839488 | render() called
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139464546839488 | render() called
2026-01-09 21:32:25 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:146 | Thread-139464546839488 | No valid layers to render
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139464546839488 | render() called
2026-01-09 21:32:25 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139464546839488 | render() called
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:45 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:137 | Thread-131593208253376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131593208253376 | Config set: SecInterp/scale = 50000.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131593208253376 | Config set: SecInterp/vert_exag = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131593208253376 | Config set: SecInterp/buffer_dist = 100.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131593208253376 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131593208253376 | Config set: SecInterp/last_output_dir = 
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131593208253376 | Config set: SecInterp/dpi = 300
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131593208253376 | Config set: SecInterp/preview_width = 800
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131593208253376 | Config set: SecInterp/preview_height = 600
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131593208253376 | Config set: SecInterp/sampling_interval = 10.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131593208253376 | Config set: SecInterp/export_quality = 95
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131593208253376 | Config set: SecInterp/auto_lod = True
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131593208253376 | Config set: SecInterp/max_preview_points = 10000
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-131593208253376 | Configuration reset to defaults
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131593208253376 | Config set: SecInterp/scale = 200.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131593208253376 | CacheService initialized (Default TTL: 3600s)
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131593208253376 | CacheService initialized (Default TTL: 3600s)
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131593208253376 | CacheService initialized (Default TTL: 3600s)
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-131593208253376 | Projecting collars from Test Layer with buffer 50.0m
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:96 | Thread-131593208253376 | No collars found within buffer area.
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-131593208253376 | Projecting collars from Test Layer with buffer 50.0m
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:117 | Thread-131593208253376 | DrillholeService.project_collars END: Found 1 collars.
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:278 | Thread-131593208253376 | ✓ Saving profile axes...
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:123 | Thread-131593208253376 | ✓ Saving topographic profile...
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:278 | Thread-131593208253376 | ✓ Saving profile axes...
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:238 | Thread-131593208253376 | ✓ Saving interpretation data...
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:267 | Thread-131593208253376 | 3D Export features are restricted for this user.
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:123 | Thread-131593208253376 | ✓ Saving topographic profile...
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:278 | Thread-131593208253376 | ✓ Saving profile axes...
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:238 | Thread-131593208253376 | ✓ Saving interpretation data...
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:250 | Thread-131593208253376 | ✓ Saving 3D interpretation data...
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:123 | Thread-131593208253376 | ✓ Saving topographic profile...
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:278 | Thread-131593208253376 | ✓ Saving profile axes...
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:148 | Thread-131593208253376 | ✓ Saving geological profile...
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:176 | Thread-131593208253376 | ✓ Saving structural profile...
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:212 | Thread-131593208253376 | ✓ Saving drillhole data...
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:238 | Thread-131593208253376 | ✓ Saving interpretation data...
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-131593208253376 | Access denied for restricted feature: 3D Export
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:267 | Thread-131593208253376 | 3D Export features are restricted for this user.
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:123 | Thread-131593208253376 | ✓ Saving topographic profile...
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:278 | Thread-131593208253376 | ✓ Saving profile axes...
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:234 | Thread-131593208253376 | No interpretations provided for export.
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:212 | Thread-131593208253376 | ✓ Saving drillhole data...
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:148 | Thread-131593208253376 | ✓ Saving geological profile...
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:238 | Thread-131593208253376 | ✓ Saving interpretation data...
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:250 | Thread-131593208253376 | ✓ Saving 3D interpretation data...
2026-01-09 21:43:46 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:265 | Thread-131593208253376 | Invalid section line layer, skipping 3D export.
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:238 | Thread-131593208253376 | ✓ Saving interpretation data...
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:176 | Thread-131593208253376 | ✓ Saving structural profile...
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:123 | Thread-131593208253376 | ✓ Saving topographic profile...
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:304 | Thread-131593208253376 | Generating master profile with interval=10.00
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:304 | Thread-131593208253376 | Generating master profile with interval=50.00
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:61 | Thread-131593208253376 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:61 | Thread-131593208253376 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-131593208253376 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-131593208253376 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-131593208253376 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-131593208253376 | Running geometry operation: test
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:260 | Thread-131593208253376 | Generated 1 drillhole traces
2026-01-09 21:43:46 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:252 | Thread-131593208253376 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 234, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-09 21:43:46 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:257 | Thread-131593208253376 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 234, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 234, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:260 | Thread-131593208253376 | Generated 1 drillhole traces
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:173 | Thread-131593208253376 | Drillhole preview skipped: No Collar ID field selected.
2026-01-09 21:43:46 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-131593208253376 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 21:43:46 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-131593208253376 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 21:43:46 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:196 | Thread-131593208253376 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 191, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 21:43:46 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:321 | Thread-131593208253376 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 314, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 191, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 21:43:46 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:156 | Thread-131593208253376 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 154, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-131593208253376 | Analyzing structures in Structure Layer with buffer 10m
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:128 | Thread-131593208253376 | Processed 1 structural measurements from Structure Layer
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:149 | Thread-131593208253376 | Successfully exported to /tmp/test_dynamic.shp
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-131593208253376 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:135 | Thread-131593208253376 | Generated QML style: /tmp/test.qml
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-131593208253376 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:135 | Thread-131593208253376 | Generated QML style: dummy.qml
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-131593208253376 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:135 | Thread-131593208253376 | Generated QML style: dummy.qml
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-131593208253376 | Loaded 0 interpretations from project
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:381 | Thread-131593208253376 | Inherited attributes from geology: GeologyUnit
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-131593208253376 | Loaded 0 interpretations from project
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: section_layer = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: section_layer_name = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-131593208253376 | Failed to restore layer for section_layer
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: buffer_dist = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: dem_layer = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: dem_layer_name = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-131593208253376 | Failed to restore layer for dem_layer
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: dem_band = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: scale = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: vert_exag = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: geol_layer = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: geol_layer_name = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-131593208253376 | Failed to restore layer for geol_layer
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: geol_field = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: struct_layer = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: struct_layer_name = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-131593208253376 | Failed to restore layer for struct_layer
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: struct_dip_field = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: struct_strike_field = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: dip_scale_factor = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: dh_collar_layer = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-131593208253376 | Failed to restore layer for dh_collar_layer
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: dh_collar_id = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: dh_use_geom = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: dh_collar_x = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: dh_collar_y = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: dh_collar_z = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: dh_collar_depth = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: dh_survey_layer = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-131593208253376 | Failed to restore layer for dh_survey_layer
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: dh_survey_id = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: dh_survey_depth = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: dh_survey_azim = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: dh_survey_incl = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: dh_interval_layer = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-131593208253376 | Failed to restore layer for dh_interval_layer
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: dh_interval_id = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: dh_interval_from = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: dh_interval_to = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: dh_interval_lith = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: last_output_dir = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: interp_custom_fields = 1.0
2026-01-09 21:43:46 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:172 | Thread-131593208253376 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: show_topo = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: show_geol = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: show_struct = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: show_drillholes = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: show_interpretations = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: auto_lod = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: adaptive_sampling = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: max_points = 1.0
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-131593208253376 | Settings loaded successfully from Project/Global config
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:497 | Thread-131593208253376 | Cache cleared by user
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-131593208253376 | GeologyGenerationTask started (Background Thread)
2026-01-09 21:43:46 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:63 | Thread-131593208253376 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-131593208253376 | GeologyGenerationTask started (Background Thread)
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-131593208253376 | GeologyGenerationTask finished with 1 segments
2026-01-09 21:43:46 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-131593208253376 | Test Title: Test Message
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-131593208253376 | Test Title: Test Message
2026-01-09 21:43:46 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-131593208253376 | Test Title: Test Message
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:174 | Thread-131593208253376 | CRITICAL_OP: finalize_polygon | points=2
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-131593208253376 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-09 21:43:46 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-131593208253376 | finalize_polygon() aborted - less than 3 points
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:174 | Thread-131593208253376 | CRITICAL_OP: finalize_polygon | points=3
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-131593208253376 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:333 | Thread-131593208253376 | finalize_polygon() - emitting polygonFinished signal for af1f612a-70a8-498f-b080-20f8ea437710
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:339 | Thread-131593208253376 | Interpretation polygon finalized with 3 vertices, ID: af1f612a-70a8-498f-b080-20f8ea437710
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:342 | Thread-131593208253376 | finalize_polygon() completed
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:174 | Thread-131593208253376 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-131593208253376 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-131593208253376 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-131593208253376 | ProfileInterpretationTool.reset() completed
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:174 | Thread-131593208253376 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-131593208253376 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-131593208253376 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-131593208253376 | ProfileInterpretationTool.reset() completed
2026-01-09 21:43:46 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:111 | Thread-131593208253376 | Failed to create locator for layer layer1: mock error
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:142 | Thread-131593208253376 | ProfileInterpretationTool.activate() called
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:145 | Thread-131593208253376 | ProfileInterpretationTool activated successfully
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:150 | Thread-131593208253376 | ProfileInterpretationTool.deactivate() called
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-131593208253376 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-131593208253376 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-131593208253376 | ProfileInterpretationTool.reset() completed
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:153 | Thread-131593208253376 | ProfileInterpretationTool deactivated successfully
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: buffer_dist = 100.5
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:353 | Thread-131593208253376 | Persistent interpretations cleared by reset
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:405 | Thread-131593208253376 | Setting saved to project: test_layer = id_123
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:405 | Thread-131593208253376 | Setting saved to project: test_layer_name = RealName
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: test_layer = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:385 | Thread-131593208253376 | Project setting hit: test_layer_name = RealName
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:442 | Thread-131593208253376 | Restoring layer: test_layer -> RealName
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-131593208253376 | Point 1 added: 0.00, 0.00
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-131593208253376 | Point 2 added: 100.00, 100.00
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-131593208253376 | Point 1 added: 50.00, 50.00
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-131593208253376 | reset() called, finalized=False
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-131593208253376 | finalize_measurement called with 1 points
2026-01-09 21:43:46 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:275 | Thread-131593208253376 | Cannot finalize measurement with less than 2 points
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-131593208253376 | finalize_measurement called with 2 points
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-131593208253376 | Setting finalized = True
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-131593208253376 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-131593208253376 | Switching to pan tool to stop measurement
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-131593208253376 | Pan tool activated - measurement should be frozen
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:202 | Thread-131593208253376 | Ignoring click - measurement is finalized
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-131593208253376 | finalize_measurement called with 2 points
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-131593208253376 | Setting finalized = True
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-131593208253376 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-131593208253376 | Switching to pan tool to stop measurement
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-131593208253376 | Pan tool activated - measurement should be frozen
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-131593208253376 | reset() called, finalized=False
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-131593208253376 | reset() called, finalized=False
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-131593208253376 | reset() called, finalized=True
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:159 | Thread-131593208253376 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-131593208253376 | reset() called, finalized=False
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-131593208253376 | finalize_measurement called with 2 points
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-131593208253376 | Setting finalized = True
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-131593208253376 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:298 | Thread-131593208253376 | Rubber band redrawn with final points only
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-131593208253376 | Switching to pan tool to stop measurement
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-131593208253376 | Pan tool activated - measurement should be frozen
2026-01-09 21:43:46 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:103 | Thread-131593208253376 | Failed to create locator for layer layer1: mock error
2026-01-09 21:43:46 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:103 | Thread-131593208253376 | Failed to create locator for layer l2: fail
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:141 | Thread-131593208253376 | ProfileMeasureTool activated
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-131593208253376 | reset() called, finalized=False
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:147 | Thread-131593208253376 | ProfileMeasureTool deactivated
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-131593208253376 | create_drillhole_trace_layer called with 1 holes
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:387 | Thread-131593208253376 | Adding 1 drillhole trace features to layer
2026-01-09 21:43:46 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-131593208253376 | Failed to create memory layer: Fail
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-131593208253376 | create_drillhole_trace_layer called with 0 holes
2026-01-09 21:43:46 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-131593208253376 | No drillhole data provided for trace layer
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-131593208253376 | create_drillhole_trace_layer called with 1 holes
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:374 | Thread-131593208253376 | Skipping hole H1: insufficient trace points (1)
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:387 | Thread-131593208253376 | Adding 0 drillhole trace features to layer
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-131593208253376 | create_drillhole_trace_layer called with 1 holes
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131593208253376 | render() called
2026-01-09 21:43:46 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:156 | Thread-131593208253376 | No valid layers to render
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131593208253376 | render() called
2026-01-09 21:43:46 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:221 | Thread-131593208253376 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 198, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131593208253376 | render() called
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131593208253376 | render() called
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131593208253376 | render() called
2026-01-09 21:43:46 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:156 | Thread-131593208253376 | No valid layers to render
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131593208253376 | render() called
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131593208253376 | render() called
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-131593208253376 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-131593208253376 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131593208253376 | CacheService initialized (Default TTL: 3600s)
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-131593208253376 | ProfileController initialized
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-131593208253376 | Loaded 0 interpretations from project
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: buffer_dist = 100.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: scale = 50000.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: vert_exag = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: dip_scale_factor = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: auto_lod = True
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-131593208253376 | Settings loaded successfully from Project/Global config
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:564 | Thread-131593208253376 | Saved 1 interpretations to project
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131593208253376 | CacheService initialized (Default TTL: 3600s)
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-131593208253376 | ProfileController initialized
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-131593208253376 | Loaded 0 interpretations from project
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: buffer_dist = 100.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: scale = 50000.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: vert_exag = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: dip_scale_factor = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: auto_lod = True
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-131593208253376 | Settings loaded successfully from Project/Global config
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:564 | Thread-131593208253376 | Saved 1 interpretations to project
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:564 | Thread-131593208253376 | Saved 0 interpretations to project
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131593208253376 | CacheService initialized (Default TTL: 3600s)
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-131593208253376 | ProfileController initialized
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-131593208253376 | Loaded 0 interpretations from project
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: buffer_dist = 100.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: scale = 50000.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: vert_exag = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: dip_scale_factor = 1.0
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: auto_lod = True
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-131593208253376 | Settings loaded successfully from Project/Global config
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-131593208253376 | Loaded 1 interpretations from project
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-131593208253376 | Point 1 added: 0.00, 0.00
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-131593208253376 | Point 2 added: 10.00, 10.00
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-131593208253376 | finalize_measurement called with 2 points
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-131593208253376 | Setting finalized = True
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-131593208253376 | Measurement finalized: 2 points, 14.14m total distance
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:298 | Thread-131593208253376 | Rubber band redrawn with final points only
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-131593208253376 | Switching to pan tool to stop measurement
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-131593208253376 | Pan tool activated - measurement should be frozen
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-131593208253376 | reset() called, finalized=True
2026-01-09 21:43:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:159 | Thread-131593208253376 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-131593208253376 | Point 1 added: 0.00, 0.00
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-131593208253376 | Point 2 added: 100.00, 100.00
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131593208253376 | CacheService initialized (Default TTL: 3600s)
2026-01-09 21:43:46 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-131593208253376 | ProfileController initialized
2026-01-09 21:43:47 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-131593208253376 | Loaded 1 interpretations from project
2026-01-09 21:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: buffer_dist = 100.0
2026-01-09 21:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: scale = 50000.0
2026-01-09 21:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: vert_exag = 1.0
2026-01-09 21:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: dip_scale_factor = 1.0
2026-01-09 21:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-131593208253376 | Global setting fallback: auto_lod = True
2026-01-09 21:43:47 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-131593208253376 | Settings loaded successfully from Project/Global config
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:137 | Thread-131945093172160 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:137 | Thread-131945093172160 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:137 | Thread-131945093172160 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:137 | Thread-131945093172160 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:137 | Thread-131945093172160 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:137 | Thread-131945093172160 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:137 | Thread-131945093172160 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:137 | Thread-131945093172160 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:137 | Thread-131945093172160 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:137 | Thread-131945093172160 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:137 | Thread-131945093172160 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:137 | Thread-131945093172160 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:137 | Thread-131945093172160 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:137 | Thread-131945093172160 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:137 | Thread-131945093172160 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:137 | Thread-131945093172160 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:137 | Thread-131945093172160 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:137 | Thread-131945093172160 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:137 | Thread-131945093172160 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:137 | Thread-131945093172160 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:137 | Thread-131945093172160 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:137 | Thread-131945093172160 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:137 | Thread-131945093172160 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131945093172160 | Config set: SecInterp/scale = 50000.0
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131945093172160 | Config set: SecInterp/vert_exag = 1.0
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131945093172160 | Config set: SecInterp/buffer_dist = 100.0
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131945093172160 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131945093172160 | Config set: SecInterp/last_output_dir = 
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131945093172160 | Config set: SecInterp/dpi = 300
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131945093172160 | Config set: SecInterp/preview_width = 800
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131945093172160 | Config set: SecInterp/preview_height = 600
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131945093172160 | Config set: SecInterp/sampling_interval = 10.0
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131945093172160 | Config set: SecInterp/export_quality = 95
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131945093172160 | Config set: SecInterp/auto_lod = True
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131945093172160 | Config set: SecInterp/max_preview_points = 10000
2026-01-09 21:44:00 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-131945093172160 | Configuration reset to defaults
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131945093172160 | Config set: SecInterp/scale = 200.0
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131945093172160 | CacheService initialized (Default TTL: 3600s)
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131945093172160 | CacheService initialized (Default TTL: 3600s)
2026-01-09 21:44:00 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131945093172160 | CacheService initialized (Default TTL: 3600s)
2026-01-09 21:44:00 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-131945093172160 | Projecting collars from Test Layer with buffer 50.0m
2026-01-09 21:44:00 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:96 | Thread-131945093172160 | No collars found within buffer area.
2026-01-09 21:44:00 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-131945093172160 | Projecting collars from Test Layer with buffer 50.0m
2026-01-09 21:44:00 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:117 | Thread-131945093172160 | DrillholeService.project_collars END: Found 1 collars.
2026-01-09 21:44:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:278 | Thread-131945093172160 | ✓ Saving profile axes...
2026-01-09 21:44:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:123 | Thread-131945093172160 | ✓ Saving topographic profile...
2026-01-09 21:44:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:278 | Thread-131945093172160 | ✓ Saving profile axes...
2026-01-09 21:44:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:238 | Thread-131945093172160 | ✓ Saving interpretation data...
2026-01-09 21:44:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:267 | Thread-131945093172160 | 3D Export features are restricted for this user.
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:123 | Thread-131945093172160 | ✓ Saving topographic profile...
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:278 | Thread-131945093172160 | ✓ Saving profile axes...
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:238 | Thread-131945093172160 | ✓ Saving interpretation data...
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:250 | Thread-131945093172160 | ✓ Saving 3D interpretation data...
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:123 | Thread-131945093172160 | ✓ Saving topographic profile...
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:278 | Thread-131945093172160 | ✓ Saving profile axes...
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:148 | Thread-131945093172160 | ✓ Saving geological profile...
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:176 | Thread-131945093172160 | ✓ Saving structural profile...
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:212 | Thread-131945093172160 | ✓ Saving drillhole data...
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:238 | Thread-131945093172160 | ✓ Saving interpretation data...
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-131945093172160 | Access denied for restricted feature: 3D Export
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:267 | Thread-131945093172160 | 3D Export features are restricted for this user.
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:123 | Thread-131945093172160 | ✓ Saving topographic profile...
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:278 | Thread-131945093172160 | ✓ Saving profile axes...
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:234 | Thread-131945093172160 | No interpretations provided for export.
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:212 | Thread-131945093172160 | ✓ Saving drillhole data...
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:148 | Thread-131945093172160 | ✓ Saving geological profile...
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:238 | Thread-131945093172160 | ✓ Saving interpretation data...
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:250 | Thread-131945093172160 | ✓ Saving 3D interpretation data...
2026-01-09 21:44:01 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:265 | Thread-131945093172160 | Invalid section line layer, skipping 3D export.
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:238 | Thread-131945093172160 | ✓ Saving interpretation data...
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:176 | Thread-131945093172160 | ✓ Saving structural profile...
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:123 | Thread-131945093172160 | ✓ Saving topographic profile...
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:304 | Thread-131945093172160 | Generating master profile with interval=10.00
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:304 | Thread-131945093172160 | Generating master profile with interval=50.00
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:61 | Thread-131945093172160 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:61 | Thread-131945093172160 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-131945093172160 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-131945093172160 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-131945093172160 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-131945093172160 | Running geometry operation: test
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:260 | Thread-131945093172160 | Generated 1 drillhole traces
2026-01-09 21:44:01 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:252 | Thread-131945093172160 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 234, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-09 21:44:01 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:257 | Thread-131945093172160 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 234, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 234, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:260 | Thread-131945093172160 | Generated 1 drillhole traces
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:173 | Thread-131945093172160 | Drillhole preview skipped: No Collar ID field selected.
2026-01-09 21:44:01 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-131945093172160 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 21:44:01 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-131945093172160 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 21:44:01 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:196 | Thread-131945093172160 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 191, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 21:44:01 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:321 | Thread-131945093172160 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 314, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 191, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 21:44:01 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:156 | Thread-131945093172160 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 154, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-131945093172160 | Analyzing structures in Structure Layer with buffer 10m
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:128 | Thread-131945093172160 | Processed 1 structural measurements from Structure Layer
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:137 | Thread-139787728755648 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-139787728755648 | Loaded 0 interpretations from project
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:381 | Thread-139787728755648 | Inherited attributes from geology: GeologyUnit
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-139787728755648 | Loaded 0 interpretations from project
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: section_layer = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: section_layer_name = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-139787728755648 | Failed to restore layer for section_layer
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: buffer_dist = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: dem_layer = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: dem_layer_name = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-139787728755648 | Failed to restore layer for dem_layer
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: dem_band = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: scale = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: vert_exag = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: geol_layer = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: geol_layer_name = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-139787728755648 | Failed to restore layer for geol_layer
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: geol_field = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: struct_layer = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: struct_layer_name = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-139787728755648 | Failed to restore layer for struct_layer
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: struct_dip_field = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: struct_strike_field = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: dip_scale_factor = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: dh_collar_layer = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-139787728755648 | Failed to restore layer for dh_collar_layer
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: dh_collar_id = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: dh_use_geom = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: dh_collar_x = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: dh_collar_y = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: dh_collar_z = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: dh_collar_depth = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: dh_survey_layer = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-139787728755648 | Failed to restore layer for dh_survey_layer
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: dh_survey_id = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: dh_survey_depth = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: dh_survey_azim = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: dh_survey_incl = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: dh_interval_layer = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-139787728755648 | Failed to restore layer for dh_interval_layer
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: dh_interval_id = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: dh_interval_from = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: dh_interval_to = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: dh_interval_lith = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: last_output_dir = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: interp_custom_fields = 1.0
2026-01-09 21:44:01 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:172 | Thread-139787728755648 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: show_topo = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: show_geol = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: show_struct = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: show_drillholes = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: show_interpretations = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: auto_lod = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: adaptive_sampling = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: max_points = 1.0
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-139787728755648 | Settings loaded successfully from Project/Global config
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:497 | Thread-139787728755648 | Cache cleared by user
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-139787728755648 | GeologyGenerationTask started (Background Thread)
2026-01-09 21:44:01 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:63 | Thread-139787728755648 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-139787728755648 | GeologyGenerationTask started (Background Thread)
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-139787728755648 | GeologyGenerationTask finished with 1 segments
2026-01-09 21:44:01 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-139787728755648 | Test Title: Test Message
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-139787728755648 | Test Title: Test Message
2026-01-09 21:44:01 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-139787728755648 | Test Title: Test Message
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:174 | Thread-139787728755648 | CRITICAL_OP: finalize_polygon | points=2
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-139787728755648 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-09 21:44:01 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-139787728755648 | finalize_polygon() aborted - less than 3 points
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:174 | Thread-139787728755648 | CRITICAL_OP: finalize_polygon | points=3
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-139787728755648 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:333 | Thread-139787728755648 | finalize_polygon() - emitting polygonFinished signal for c996fa34-245b-44ae-9368-7427264dd2fb
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:339 | Thread-139787728755648 | Interpretation polygon finalized with 3 vertices, ID: c996fa34-245b-44ae-9368-7427264dd2fb
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:342 | Thread-139787728755648 | finalize_polygon() completed
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:174 | Thread-139787728755648 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-139787728755648 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-139787728755648 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-139787728755648 | ProfileInterpretationTool.reset() completed
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:174 | Thread-139787728755648 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-139787728755648 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-139787728755648 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-139787728755648 | ProfileInterpretationTool.reset() completed
2026-01-09 21:44:01 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:111 | Thread-139787728755648 | Failed to create locator for layer layer1: mock error
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:142 | Thread-139787728755648 | ProfileInterpretationTool.activate() called
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:145 | Thread-139787728755648 | ProfileInterpretationTool activated successfully
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:150 | Thread-139787728755648 | ProfileInterpretationTool.deactivate() called
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-139787728755648 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-139787728755648 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-139787728755648 | ProfileInterpretationTool.reset() completed
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:153 | Thread-139787728755648 | ProfileInterpretationTool deactivated successfully
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: buffer_dist = 100.5
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:353 | Thread-139787728755648 | Persistent interpretations cleared by reset
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:405 | Thread-139787728755648 | Setting saved to project: test_layer = id_123
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:405 | Thread-139787728755648 | Setting saved to project: test_layer_name = RealName
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139787728755648 | Global setting fallback: test_layer = 1.0
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:385 | Thread-139787728755648 | Project setting hit: test_layer_name = RealName
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:442 | Thread-139787728755648 | Restoring layer: test_layer -> RealName
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-139787728755648 | Point 1 added: 0.00, 0.00
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-139787728755648 | Point 2 added: 100.00, 100.00
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-139787728755648 | Point 1 added: 50.00, 50.00
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-139787728755648 | reset() called, finalized=False
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-139787728755648 | finalize_measurement called with 1 points
2026-01-09 21:44:01 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:275 | Thread-139787728755648 | Cannot finalize measurement with less than 2 points
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-139787728755648 | finalize_measurement called with 2 points
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-139787728755648 | Setting finalized = True
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-139787728755648 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-139787728755648 | Switching to pan tool to stop measurement
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-139787728755648 | Pan tool activated - measurement should be frozen
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:202 | Thread-139787728755648 | Ignoring click - measurement is finalized
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-139787728755648 | finalize_measurement called with 2 points
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-139787728755648 | Setting finalized = True
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-139787728755648 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-139787728755648 | Switching to pan tool to stop measurement
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-139787728755648 | Pan tool activated - measurement should be frozen
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-139787728755648 | reset() called, finalized=False
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-139787728755648 | reset() called, finalized=False
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-139787728755648 | reset() called, finalized=True
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:159 | Thread-139787728755648 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-139787728755648 | reset() called, finalized=False
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-139787728755648 | finalize_measurement called with 2 points
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-139787728755648 | Setting finalized = True
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-139787728755648 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:298 | Thread-139787728755648 | Rubber band redrawn with final points only
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-139787728755648 | Switching to pan tool to stop measurement
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-139787728755648 | Pan tool activated - measurement should be frozen
2026-01-09 21:44:01 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:103 | Thread-139787728755648 | Failed to create locator for layer layer1: mock error
2026-01-09 21:44:01 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:103 | Thread-139787728755648 | Failed to create locator for layer l2: fail
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:141 | Thread-139787728755648 | ProfileMeasureTool activated
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-139787728755648 | reset() called, finalized=False
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:147 | Thread-139787728755648 | ProfileMeasureTool deactivated
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-139787728755648 | create_drillhole_trace_layer called with 1 holes
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:387 | Thread-139787728755648 | Adding 1 drillhole trace features to layer
2026-01-09 21:44:01 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-139787728755648 | Failed to create memory layer: Fail
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-139787728755648 | create_drillhole_trace_layer called with 0 holes
2026-01-09 21:44:01 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-139787728755648 | No drillhole data provided for trace layer
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-139787728755648 | create_drillhole_trace_layer called with 1 holes
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:374 | Thread-139787728755648 | Skipping hole H1: insufficient trace points (1)
2026-01-09 21:44:01 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:387 | Thread-139787728755648 | Adding 0 drillhole trace features to layer
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-139787728755648 | create_drillhole_trace_layer called with 1 holes
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139787728755648 | render() called
2026-01-09 21:44:01 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:156 | Thread-139787728755648 | No valid layers to render
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139787728755648 | render() called
2026-01-09 21:44:01 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:221 | Thread-139787728755648 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 198, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139787728755648 | render() called
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139787728755648 | render() called
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139787728755648 | render() called
2026-01-09 21:44:01 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:156 | Thread-139787728755648 | No valid layers to render
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139787728755648 | render() called
2026-01-09 21:44:01 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139787728755648 | render() called
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:137 | Thread-138699435117504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:137 | Thread-138699435117504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:137 | Thread-138699435117504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:137 | Thread-138699435117504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:137 | Thread-138699435117504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:137 | Thread-138699435117504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:137 | Thread-138699435117504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:137 | Thread-138699435117504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:137 | Thread-138699435117504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:137 | Thread-138699435117504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:137 | Thread-138699435117504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:137 | Thread-138699435117504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:137 | Thread-138699435117504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:137 | Thread-138699435117504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:137 | Thread-138699435117504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:137 | Thread-138699435117504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:137 | Thread-138699435117504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:137 | Thread-138699435117504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:137 | Thread-138699435117504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:137 | Thread-138699435117504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:137 | Thread-138699435117504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:137 | Thread-138699435117504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:137 | Thread-138699435117504 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138699435117504 | Config set: SecInterp/scale = 50000.0
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138699435117504 | Config set: SecInterp/vert_exag = 1.0
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138699435117504 | Config set: SecInterp/buffer_dist = 100.0
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138699435117504 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138699435117504 | Config set: SecInterp/last_output_dir = 
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138699435117504 | Config set: SecInterp/dpi = 300
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138699435117504 | Config set: SecInterp/preview_width = 800
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138699435117504 | Config set: SecInterp/preview_height = 600
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138699435117504 | Config set: SecInterp/sampling_interval = 10.0
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138699435117504 | Config set: SecInterp/export_quality = 95
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138699435117504 | Config set: SecInterp/auto_lod = True
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138699435117504 | Config set: SecInterp/max_preview_points = 10000
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-138699435117504 | Configuration reset to defaults
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138699435117504 | Config set: SecInterp/scale = 200.0
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138699435117504 | CacheService initialized (Default TTL: 3600s)
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138699435117504 | CacheService initialized (Default TTL: 3600s)
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138699435117504 | CacheService initialized (Default TTL: 3600s)
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-138699435117504 | Projecting collars from Test Layer with buffer 50.0m
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:96 | Thread-138699435117504 | No collars found within buffer area.
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-138699435117504 | Projecting collars from Test Layer with buffer 50.0m
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:117 | Thread-138699435117504 | DrillholeService.project_collars END: Found 1 collars.
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:278 | Thread-138699435117504 | ✓ Saving profile axes...
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:123 | Thread-138699435117504 | ✓ Saving topographic profile...
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:278 | Thread-138699435117504 | ✓ Saving profile axes...
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:238 | Thread-138699435117504 | ✓ Saving interpretation data...
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:267 | Thread-138699435117504 | 3D Export features are restricted for this user.
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:123 | Thread-138699435117504 | ✓ Saving topographic profile...
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:278 | Thread-138699435117504 | ✓ Saving profile axes...
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:238 | Thread-138699435117504 | ✓ Saving interpretation data...
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:250 | Thread-138699435117504 | ✓ Saving 3D interpretation data...
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:123 | Thread-138699435117504 | ✓ Saving topographic profile...
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:278 | Thread-138699435117504 | ✓ Saving profile axes...
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:148 | Thread-138699435117504 | ✓ Saving geological profile...
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:176 | Thread-138699435117504 | ✓ Saving structural profile...
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:212 | Thread-138699435117504 | ✓ Saving drillhole data...
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:238 | Thread-138699435117504 | ✓ Saving interpretation data...
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-138699435117504 | Access denied for restricted feature: 3D Export
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:267 | Thread-138699435117504 | 3D Export features are restricted for this user.
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:123 | Thread-138699435117504 | ✓ Saving topographic profile...
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:278 | Thread-138699435117504 | ✓ Saving profile axes...
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:234 | Thread-138699435117504 | No interpretations provided for export.
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:212 | Thread-138699435117504 | ✓ Saving drillhole data...
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:148 | Thread-138699435117504 | ✓ Saving geological profile...
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:238 | Thread-138699435117504 | ✓ Saving interpretation data...
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:250 | Thread-138699435117504 | ✓ Saving 3D interpretation data...
2026-01-09 21:44:09 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:265 | Thread-138699435117504 | Invalid section line layer, skipping 3D export.
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:238 | Thread-138699435117504 | ✓ Saving interpretation data...
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:176 | Thread-138699435117504 | ✓ Saving structural profile...
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:123 | Thread-138699435117504 | ✓ Saving topographic profile...
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:304 | Thread-138699435117504 | Generating master profile with interval=10.00
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:304 | Thread-138699435117504 | Generating master profile with interval=50.00
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:61 | Thread-138699435117504 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:61 | Thread-138699435117504 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-138699435117504 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-138699435117504 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-138699435117504 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-09 21:44:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-138699435117504 | Running geometry operation: test
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:260 | Thread-138699435117504 | Generated 1 drillhole traces
2026-01-09 21:44:09 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:252 | Thread-138699435117504 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 234, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-09 21:44:09 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:257 | Thread-138699435117504 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 234, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 234, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:260 | Thread-138699435117504 | Generated 1 drillhole traces
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:173 | Thread-138699435117504 | Drillhole preview skipped: No Collar ID field selected.
2026-01-09 21:44:09 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-138699435117504 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 21:44:09 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-138699435117504 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 21:44:09 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:196 | Thread-138699435117504 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 191, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 21:44:09 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:321 | Thread-138699435117504 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 314, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 191, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 21:44:09 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:156 | Thread-138699435117504 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 154, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-138699435117504 | Analyzing structures in Structure Layer with buffer 10m
2026-01-09 21:44:09 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:128 | Thread-138699435117504 | Processed 1 structural measurements from Structure Layer
2026-01-09 21:50:57 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:135 | Thread-138195620056000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:50:57 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-138195620056000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:50:57 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-138195620056000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:50:57 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-138195620056000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:50:57 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-138195620056000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:50:57 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:135 | Thread-138195620056000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:50:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-138195620056000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:50:58 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:135 | Thread-138195620056000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:50:59 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-138195620056000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:50:59 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-138195620056000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:50:59 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-138195620056000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 21:50:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-138195620056000 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:04 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:04 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:04 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:04 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:135 | Thread-131638624054208 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131638624054208 | Config set: SecInterp/scale = 50000.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131638624054208 | Config set: SecInterp/vert_exag = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131638624054208 | Config set: SecInterp/buffer_dist = 100.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131638624054208 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131638624054208 | Config set: SecInterp/last_output_dir = 
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131638624054208 | Config set: SecInterp/dpi = 300
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131638624054208 | Config set: SecInterp/preview_width = 800
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131638624054208 | Config set: SecInterp/preview_height = 600
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131638624054208 | Config set: SecInterp/sampling_interval = 10.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131638624054208 | Config set: SecInterp/export_quality = 95
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131638624054208 | Config set: SecInterp/auto_lod = True
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131638624054208 | Config set: SecInterp/max_preview_points = 10000
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-131638624054208 | Configuration reset to defaults
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131638624054208 | Config set: SecInterp/scale = 200.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131638624054208 | CacheService initialized (Default TTL: 3600s)
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131638624054208 | CacheService initialized (Default TTL: 3600s)
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131638624054208 | CacheService initialized (Default TTL: 3600s)
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-131638624054208 | Projecting collars from Test Layer with buffer 50.0m
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-131638624054208 | No collars found within buffer area.
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-131638624054208 | Projecting collars from Test Layer with buffer 50.0m
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-131638624054208 | DrillholeService.project_collars END: Found 1 collars.
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:272 | Thread-131638624054208 | ✓ Saving profile axes...
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:119 | Thread-131638624054208 | ✓ Saving topographic profile...
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:272 | Thread-131638624054208 | ✓ Saving profile axes...
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:234 | Thread-131638624054208 | ✓ Saving interpretation data...
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:263 | Thread-131638624054208 | 3D Export features are restricted for this user.
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:119 | Thread-131638624054208 | ✓ Saving topographic profile...
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:272 | Thread-131638624054208 | ✓ Saving profile axes...
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:234 | Thread-131638624054208 | ✓ Saving interpretation data...
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:246 | Thread-131638624054208 | ✓ Saving 3D interpretation data...
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:119 | Thread-131638624054208 | ✓ Saving topographic profile...
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:272 | Thread-131638624054208 | ✓ Saving profile axes...
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:144 | Thread-131638624054208 | ✓ Saving geological profile...
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:172 | Thread-131638624054208 | ✓ Saving structural profile...
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:208 | Thread-131638624054208 | ✓ Saving drillhole data...
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:234 | Thread-131638624054208 | ✓ Saving interpretation data...
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-131638624054208 | Access denied for restricted feature: 3D Export
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:263 | Thread-131638624054208 | 3D Export features are restricted for this user.
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:119 | Thread-131638624054208 | ✓ Saving topographic profile...
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:272 | Thread-131638624054208 | ✓ Saving profile axes...
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:230 | Thread-131638624054208 | No interpretations provided for export.
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:208 | Thread-131638624054208 | ✓ Saving drillhole data...
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:144 | Thread-131638624054208 | ✓ Saving geological profile...
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:234 | Thread-131638624054208 | ✓ Saving interpretation data...
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:246 | Thread-131638624054208 | ✓ Saving 3D interpretation data...
2026-01-09 22:06:05 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:261 | Thread-131638624054208 | Invalid section line layer, skipping 3D export.
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:234 | Thread-131638624054208 | ✓ Saving interpretation data...
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:172 | Thread-131638624054208 | ✓ Saving structural profile...
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:119 | Thread-131638624054208 | ✓ Saving topographic profile...
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-131638624054208 | Generating master profile with interval=10.00
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-131638624054208 | Generating master profile with interval=50.00
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-131638624054208 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-131638624054208 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-131638624054208 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-131638624054208 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-131638624054208 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-131638624054208 | Running geometry operation: test
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-131638624054208 | Generated 1 drillhole traces
2026-01-09 22:06:05 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-131638624054208 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-09 22:06:05 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-131638624054208 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-131638624054208 | Generated 1 drillhole traces
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-131638624054208 | Drillhole preview skipped: No Collar ID field selected.
2026-01-09 22:06:05 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-131638624054208 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 22:06:05 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-131638624054208 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 22:06:05 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-131638624054208 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 22:06:05 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-131638624054208 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 22:06:05 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-131638624054208 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-131638624054208 | Analyzing structures in Structure Layer with buffer 10m
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-131638624054208 | Processed 1 structural measurements from Structure Layer
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-131638624054208 | Successfully exported to /tmp/test_dynamic.shp
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-131638624054208 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-131638624054208 | Generated QML style: /tmp/test.qml
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-131638624054208 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-131638624054208 | Generated QML style: dummy.qml
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-131638624054208 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-131638624054208 | Generated QML style: dummy.qml
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-131638624054208 | Loaded 0 interpretations from project
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:369 | Thread-131638624054208 | Inherited attributes from geology: GeologyUnit
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-131638624054208 | Loaded 0 interpretations from project
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: section_layer = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: section_layer_name = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-131638624054208 | Failed to restore layer for section_layer
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: buffer_dist = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: dem_layer = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: dem_layer_name = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-131638624054208 | Failed to restore layer for dem_layer
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: dem_band = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: scale = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: vert_exag = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: geol_layer = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: geol_layer_name = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-131638624054208 | Failed to restore layer for geol_layer
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: geol_field = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: struct_layer = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: struct_layer_name = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-131638624054208 | Failed to restore layer for struct_layer
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: struct_dip_field = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: struct_strike_field = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: dip_scale_factor = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: dh_collar_layer = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-131638624054208 | Failed to restore layer for dh_collar_layer
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: dh_collar_id = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: dh_use_geom = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: dh_collar_x = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: dh_collar_y = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: dh_collar_z = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: dh_collar_depth = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: dh_survey_layer = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-131638624054208 | Failed to restore layer for dh_survey_layer
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: dh_survey_id = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: dh_survey_depth = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: dh_survey_azim = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: dh_survey_incl = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: dh_interval_layer = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-131638624054208 | Failed to restore layer for dh_interval_layer
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: dh_interval_id = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: dh_interval_from = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: dh_interval_to = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: dh_interval_lith = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: last_output_dir = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: interp_custom_fields = 1.0
2026-01-09 22:06:05 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-131638624054208 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: show_topo = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: show_geol = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: show_struct = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: show_drillholes = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: show_interpretations = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: auto_lod = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: adaptive_sampling = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: max_points = 1.0
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-131638624054208 | Settings loaded successfully from Project/Global config
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:477 | Thread-131638624054208 | Cache cleared by user
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-131638624054208 | GeologyGenerationTask started (Background Thread)
2026-01-09 22:06:05 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-131638624054208 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-131638624054208 | GeologyGenerationTask started (Background Thread)
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-131638624054208 | GeologyGenerationTask finished with 1 segments
2026-01-09 22:06:05 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-131638624054208 | Test Title: Test Message
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-131638624054208 | Test Title: Test Message
2026-01-09 22:06:05 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-131638624054208 | Test Title: Test Message
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:170 | Thread-131638624054208 | CRITICAL_OP: finalize_polygon | points=2
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-131638624054208 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-09 22:06:05 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-131638624054208 | finalize_polygon() aborted - less than 3 points
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:170 | Thread-131638624054208 | CRITICAL_OP: finalize_polygon | points=3
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-131638624054208 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-131638624054208 | finalize_polygon() - emitting polygonFinished signal for 931e7061-081f-427d-b1eb-5d41a71b342e
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-131638624054208 | Interpretation polygon finalized with 3 vertices, ID: 931e7061-081f-427d-b1eb-5d41a71b342e
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-131638624054208 | finalize_polygon() completed
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:170 | Thread-131638624054208 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-131638624054208 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-131638624054208 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-131638624054208 | ProfileInterpretationTool.reset() completed
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:170 | Thread-131638624054208 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-131638624054208 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-131638624054208 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-131638624054208 | ProfileInterpretationTool.reset() completed
2026-01-09 22:06:05 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-131638624054208 | Failed to create locator for layer layer1: mock error
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-131638624054208 | ProfileInterpretationTool.activate() called
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-131638624054208 | ProfileInterpretationTool activated successfully
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-131638624054208 | ProfileInterpretationTool.deactivate() called
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-131638624054208 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-131638624054208 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-131638624054208 | ProfileInterpretationTool.reset() completed
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-131638624054208 | ProfileInterpretationTool deactivated successfully
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: buffer_dist = 100.5
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-131638624054208 | Persistent interpretations cleared by reset
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-131638624054208 | Setting saved to project: test_layer = id_123
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-131638624054208 | Setting saved to project: test_layer_name = RealName
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: test_layer = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131638624054208 | Project setting hit: test_layer_name = RealName
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-131638624054208 | Restoring layer: test_layer -> RealName
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-131638624054208 | Point 1 added: 0.00, 0.00
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-131638624054208 | Point 2 added: 100.00, 100.00
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-131638624054208 | Point 1 added: 50.00, 50.00
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-131638624054208 | reset() called, finalized=False
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-131638624054208 | finalize_measurement called with 1 points
2026-01-09 22:06:05 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-131638624054208 | Cannot finalize measurement with less than 2 points
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-131638624054208 | finalize_measurement called with 2 points
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-131638624054208 | Setting finalized = True
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-131638624054208 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-131638624054208 | Switching to pan tool to stop measurement
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-131638624054208 | Pan tool activated - measurement should be frozen
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-131638624054208 | Ignoring click - measurement is finalized
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-131638624054208 | finalize_measurement called with 2 points
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-131638624054208 | Setting finalized = True
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-131638624054208 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-131638624054208 | Switching to pan tool to stop measurement
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-131638624054208 | Pan tool activated - measurement should be frozen
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-131638624054208 | reset() called, finalized=False
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-131638624054208 | reset() called, finalized=False
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-131638624054208 | reset() called, finalized=True
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-131638624054208 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-131638624054208 | reset() called, finalized=False
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-131638624054208 | finalize_measurement called with 2 points
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-131638624054208 | Setting finalized = True
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-131638624054208 | Measurement finalized: 2 points, 100.00m total distance
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-131638624054208 | Rubber band redrawn with final points only
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-131638624054208 | Switching to pan tool to stop measurement
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-131638624054208 | Pan tool activated - measurement should be frozen
2026-01-09 22:06:05 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-131638624054208 | Failed to create locator for layer layer1: mock error
2026-01-09 22:06:05 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-131638624054208 | Failed to create locator for layer l2: fail
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-131638624054208 | ProfileMeasureTool activated
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-131638624054208 | reset() called, finalized=False
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-131638624054208 | ProfileMeasureTool deactivated
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-131638624054208 | create_drillhole_trace_layer called with 1 holes
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-131638624054208 | Adding 1 drillhole trace features to layer
2026-01-09 22:06:05 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-131638624054208 | Failed to create memory layer: Fail
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-131638624054208 | create_drillhole_trace_layer called with 0 holes
2026-01-09 22:06:05 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-131638624054208 | No drillhole data provided for trace layer
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-131638624054208 | create_drillhole_trace_layer called with 1 holes
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-131638624054208 | Skipping hole H1: insufficient trace points (1)
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-131638624054208 | Adding 0 drillhole trace features to layer
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-131638624054208 | create_drillhole_trace_layer called with 1 holes
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131638624054208 | render() called
2026-01-09 22:06:05 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-131638624054208 | No valid layers to render
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131638624054208 | render() called
2026-01-09 22:06:05 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-131638624054208 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131638624054208 | render() called
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131638624054208 | render() called
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131638624054208 | render() called
2026-01-09 22:06:05 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-131638624054208 | No valid layers to render
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131638624054208 | render() called
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131638624054208 | render() called
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-131638624054208 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-131638624054208 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131638624054208 | CacheService initialized (Default TTL: 3600s)
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-131638624054208 | ProfileController initialized
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-131638624054208 | Loaded 0 interpretations from project
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: buffer_dist = 100.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: scale = 50000.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: vert_exag = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: dip_scale_factor = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: auto_lod = True
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-131638624054208 | Settings loaded successfully from Project/Global config
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-131638624054208 | Saved 1 interpretations to project
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131638624054208 | CacheService initialized (Default TTL: 3600s)
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-131638624054208 | ProfileController initialized
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-131638624054208 | Loaded 0 interpretations from project
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: buffer_dist = 100.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: scale = 50000.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: vert_exag = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: dip_scale_factor = 1.0
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: auto_lod = True
2026-01-09 22:06:05 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-131638624054208 | Settings loaded successfully from Project/Global config
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-131638624054208 | Saved 1 interpretations to project
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-131638624054208 | Saved 0 interpretations to project
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131638624054208 | CacheService initialized (Default TTL: 3600s)
2026-01-09 22:06:05 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-131638624054208 | ProfileController initialized
2026-01-09 22:06:06 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-131638624054208 | Loaded 0 interpretations from project
2026-01-09 22:06:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: buffer_dist = 100.0
2026-01-09 22:06:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: scale = 50000.0
2026-01-09 22:06:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: vert_exag = 1.0
2026-01-09 22:06:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: dip_scale_factor = 1.0
2026-01-09 22:06:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: auto_lod = True
2026-01-09 22:06:06 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-131638624054208 | Settings loaded successfully from Project/Global config
2026-01-09 22:06:06 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-131638624054208 | Loaded 1 interpretations from project
2026-01-09 22:06:06 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-131638624054208 | Point 1 added: 0.00, 0.00
2026-01-09 22:06:06 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-131638624054208 | Point 2 added: 10.00, 10.00
2026-01-09 22:06:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-131638624054208 | finalize_measurement called with 2 points
2026-01-09 22:06:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-131638624054208 | Setting finalized = True
2026-01-09 22:06:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-131638624054208 | Measurement finalized: 2 points, 14.14m total distance
2026-01-09 22:06:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-131638624054208 | Rubber band redrawn with final points only
2026-01-09 22:06:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-131638624054208 | Switching to pan tool to stop measurement
2026-01-09 22:06:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-131638624054208 | Pan tool activated - measurement should be frozen
2026-01-09 22:06:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-131638624054208 | reset() called, finalized=True
2026-01-09 22:06:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-131638624054208 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-09 22:06:06 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-131638624054208 | Point 1 added: 0.00, 0.00
2026-01-09 22:06:06 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-131638624054208 | Point 2 added: 100.00, 100.00
2026-01-09 22:06:06 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131638624054208 | CacheService initialized (Default TTL: 3600s)
2026-01-09 22:06:06 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-131638624054208 | ProfileController initialized
2026-01-09 22:06:06 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-131638624054208 | Loaded 1 interpretations from project
2026-01-09 22:06:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: buffer_dist = 100.0
2026-01-09 22:06:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: scale = 50000.0
2026-01-09 22:06:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: vert_exag = 1.0
2026-01-09 22:06:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: dip_scale_factor = 1.0
2026-01-09 22:06:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131638624054208 | Global setting fallback: auto_lod = True
2026-01-09 22:06:06 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-131638624054208 | Settings loaded successfully from Project/Global config
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:135 | Thread-123651236498368 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123651236498368 | Config set: SecInterp/scale = 50000.0
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123651236498368 | Config set: SecInterp/vert_exag = 1.0
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123651236498368 | Config set: SecInterp/buffer_dist = 100.0
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123651236498368 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123651236498368 | Config set: SecInterp/last_output_dir = 
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123651236498368 | Config set: SecInterp/dpi = 300
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123651236498368 | Config set: SecInterp/preview_width = 800
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123651236498368 | Config set: SecInterp/preview_height = 600
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123651236498368 | Config set: SecInterp/sampling_interval = 10.0
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123651236498368 | Config set: SecInterp/export_quality = 95
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123651236498368 | Config set: SecInterp/auto_lod = True
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123651236498368 | Config set: SecInterp/max_preview_points = 10000
2026-01-09 22:06:56 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-123651236498368 | Configuration reset to defaults
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-123651236498368 | Config set: SecInterp/scale = 200.0
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123651236498368 | CacheService initialized (Default TTL: 3600s)
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123651236498368 | CacheService initialized (Default TTL: 3600s)
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123651236498368 | CacheService initialized (Default TTL: 3600s)
2026-01-09 22:06:56 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-123651236498368 | Projecting collars from Test Layer with buffer 50.0m
2026-01-09 22:06:56 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-123651236498368 | No collars found within buffer area.
2026-01-09 22:06:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:272 | Thread-123651236498368 | ✓ Saving profile axes...
2026-01-09 22:06:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:119 | Thread-123651236498368 | ✓ Saving topographic profile...
2026-01-09 22:06:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:272 | Thread-123651236498368 | ✓ Saving profile axes...
2026-01-09 22:06:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:234 | Thread-123651236498368 | ✓ Saving interpretation data...
2026-01-09 22:06:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:263 | Thread-123651236498368 | 3D Export features are restricted for this user.
2026-01-09 22:06:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:119 | Thread-123651236498368 | ✓ Saving topographic profile...
2026-01-09 22:06:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:272 | Thread-123651236498368 | ✓ Saving profile axes...
2026-01-09 22:06:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:144 | Thread-123651236498368 | ✓ Saving geological profile...
2026-01-09 22:06:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:172 | Thread-123651236498368 | ✓ Saving structural profile...
2026-01-09 22:06:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:208 | Thread-123651236498368 | ✓ Saving drillhole data...
2026-01-09 22:06:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:234 | Thread-123651236498368 | ✓ Saving interpretation data...
2026-01-09 22:06:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:246 | Thread-123651236498368 | ✓ Saving 3D interpretation data...
2026-01-09 22:06:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:119 | Thread-123651236498368 | ✓ Saving topographic profile...
2026-01-09 22:06:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:272 | Thread-123651236498368 | ✓ Saving profile axes...
2026-01-09 22:06:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:230 | Thread-123651236498368 | No interpretations provided for export.
2026-01-09 22:06:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:208 | Thread-123651236498368 | ✓ Saving drillhole data...
2026-01-09 22:06:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:144 | Thread-123651236498368 | ✓ Saving geological profile...
2026-01-09 22:06:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:234 | Thread-123651236498368 | ✓ Saving interpretation data...
2026-01-09 22:06:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:246 | Thread-123651236498368 | ✓ Saving 3D interpretation data...
2026-01-09 22:06:56 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:261 | Thread-123651236498368 | Invalid section line layer, skipping 3D export.
2026-01-09 22:06:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:234 | Thread-123651236498368 | ✓ Saving interpretation data...
2026-01-09 22:06:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:172 | Thread-123651236498368 | ✓ Saving structural profile...
2026-01-09 22:06:56 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:119 | Thread-123651236498368 | ✓ Saving topographic profile...
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-123651236498368 | Generating master profile with interval=50.00
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-123651236498368 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-123651236498368 | Spatial Filter: confirmed 0 features intersecting buffer
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-123651236498368 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-123651236498368 | LOD Decimation: 100 -> 2 points (tol=10.00)
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-123651236498368 | LOD Decimation: 3 -> 2 points (tol=10.00)
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-123651236498368 | Running geometry operation: test
2026-01-09 22:06:56 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-123651236498368 | Generated 1 drillhole traces
2026-01-09 22:06:56 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-123651236498368 | Drillhole preview skipped: No Collar ID field selected.
2026-01-09 22:06:56 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-123651236498368 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 22:06:56 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-123651236498368 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 22:06:56 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-123651236498368 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 22:06:56 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-123651236498368 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-09 22:06:56 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-123651236498368 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-09 22:06:56 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-123651236498368 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-09 22:06:56 | WARNING  | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _handle_post_export_styles:90 | Thread-123651236498368 | Failed to generate QML style: QgsRendererCategory(): arguments did not match any overloaded call:
  overload 1: too many arguments
  overload 2: argument 3 has unexpected type 'MagicMock'
  overload 3: argument 1 has unexpected type 'MagicMock'
2026-01-09 22:06:56 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-123651236498368 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _configure_3d_renderer:440 | Thread-123651236498368 | Configured native 3D renderer in QML
2026-01-09 22:06:56 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-123651236498368 | Generated QML style: dummy.qml
2026-01-09 22:06:56 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-123651236498368 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-09 22:06:56 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _configure_3d_renderer:440 | Thread-123651236498368 | Configured native 3D renderer in QML
2026-01-09 22:06:56 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-123651236498368 | Generated QML style: dummy.qml
2026-01-09 22:07:20 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:135 | Thread-140701475523520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:07:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-140701475523520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:07:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-140701475523520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:07:20 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-140701475523520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:07:20 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-140701475523520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:07:20 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:135 | Thread-140701475523520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:07:21 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-140701475523520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:07:21 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:135 | Thread-140701475523520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:07:21 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-140701475523520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:07:21 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-140701475523520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:07:21 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-140701475523520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-09 22:07:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-140701475523520 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:135 | Thread-130830625229760 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130830625229760 | Config set: SecInterp/scale = 50000.0
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130830625229760 | Config set: SecInterp/vert_exag = 1.0
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130830625229760 | Config set: SecInterp/buffer_dist = 100.0
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130830625229760 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130830625229760 | Config set: SecInterp/last_output_dir = 
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130830625229760 | Config set: SecInterp/dpi = 300
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130830625229760 | Config set: SecInterp/preview_width = 800
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130830625229760 | Config set: SecInterp/preview_height = 600
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130830625229760 | Config set: SecInterp/sampling_interval = 10.0
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130830625229760 | Config set: SecInterp/export_quality = 95
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130830625229760 | Config set: SecInterp/auto_lod = True
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130830625229760 | Config set: SecInterp/max_preview_points = 10000
2026-01-11 12:26:59 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-130830625229760 | Configuration reset to defaults
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-130830625229760 | Config set: SecInterp/scale = 200.0
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130830625229760 | CacheService initialized (Default TTL: 3600s)
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130830625229760 | CacheService initialized (Default TTL: 3600s)
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130830625229760 | CacheService initialized (Default TTL: 3600s)
2026-01-11 12:26:59 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-130830625229760 | Projecting collars from Test Layer with buffer 50.0m
2026-01-11 12:26:59 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-130830625229760 | No collars found within buffer area.
2026-01-11 12:26:59 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-130830625229760 | Projecting collars from Test Layer with buffer 50.0m
2026-01-11 12:26:59 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-130830625229760 | DrillholeService.project_collars END: Found 1 collars.
2026-01-11 12:26:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:272 | Thread-130830625229760 | ✓ Saving profile axes...
2026-01-11 12:26:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:119 | Thread-130830625229760 | ✓ Saving topographic profile...
2026-01-11 12:26:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:272 | Thread-130830625229760 | ✓ Saving profile axes...
2026-01-11 12:26:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:234 | Thread-130830625229760 | ✓ Saving interpretation data...
2026-01-11 12:26:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:263 | Thread-130830625229760 | 3D Export features are restricted for this user.
2026-01-11 12:26:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:119 | Thread-130830625229760 | ✓ Saving topographic profile...
2026-01-11 12:26:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:272 | Thread-130830625229760 | ✓ Saving profile axes...
2026-01-11 12:26:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:234 | Thread-130830625229760 | ✓ Saving interpretation data...
2026-01-11 12:26:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:246 | Thread-130830625229760 | ✓ Saving 3D interpretation data...
2026-01-11 12:26:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:119 | Thread-130830625229760 | ✓ Saving topographic profile...
2026-01-11 12:26:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:272 | Thread-130830625229760 | ✓ Saving profile axes...
2026-01-11 12:26:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:144 | Thread-130830625229760 | ✓ Saving geological profile...
2026-01-11 12:26:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:172 | Thread-130830625229760 | ✓ Saving structural profile...
2026-01-11 12:26:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:208 | Thread-130830625229760 | ✓ Saving drillhole data...
2026-01-11 12:26:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:234 | Thread-130830625229760 | ✓ Saving interpretation data...
2026-01-11 12:26:59 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-130830625229760 | Access denied for restricted feature: 3D Export
2026-01-11 12:26:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:263 | Thread-130830625229760 | 3D Export features are restricted for this user.
2026-01-11 12:26:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:119 | Thread-130830625229760 | ✓ Saving topographic profile...
2026-01-11 12:26:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:272 | Thread-130830625229760 | ✓ Saving profile axes...
2026-01-11 12:26:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:230 | Thread-130830625229760 | No interpretations provided for export.
2026-01-11 12:26:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:208 | Thread-130830625229760 | ✓ Saving drillhole data...
2026-01-11 12:26:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:144 | Thread-130830625229760 | ✓ Saving geological profile...
2026-01-11 12:26:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:234 | Thread-130830625229760 | ✓ Saving interpretation data...
2026-01-11 12:26:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:246 | Thread-130830625229760 | ✓ Saving 3D interpretation data...
2026-01-11 12:26:59 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:261 | Thread-130830625229760 | Invalid section line layer, skipping 3D export.
2026-01-11 12:26:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:234 | Thread-130830625229760 | ✓ Saving interpretation data...
2026-01-11 12:26:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:172 | Thread-130830625229760 | ✓ Saving structural profile...
2026-01-11 12:26:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:119 | Thread-130830625229760 | ✓ Saving topographic profile...
2026-01-11 12:26:59 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-130830625229760 | Generating master profile with interval=10.00
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-130830625229760 | Generating master profile with interval=50.00
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-130830625229760 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-130830625229760 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-130830625229760 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-130830625229760 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-130830625229760 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-130830625229760 | Running geometry operation: test
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-130830625229760 | Generated 1 drillhole traces
2026-01-11 12:27:00 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-130830625229760 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-11 12:27:00 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-130830625229760 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-130830625229760 | Generated 1 drillhole traces
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-130830625229760 | Drillhole preview skipped: No Collar ID field selected.
2026-01-11 12:27:00 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-130830625229760 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-11 12:27:00 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-130830625229760 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-11 12:27:00 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-130830625229760 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-11 12:27:00 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-130830625229760 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-11 12:27:00 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-130830625229760 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-130830625229760 | Analyzing structures in Structure Layer with buffer 10m
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-130830625229760 | Processed 1 structural measurements from Structure Layer
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-130830625229760 | Successfully exported to /tmp/test_dynamic.shp
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-130830625229760 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-130830625229760 | Generated QML style: /tmp/test.qml
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-130830625229760 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-130830625229760 | Generated QML style: dummy.qml
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-130830625229760 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-130830625229760 | Generated QML style: dummy.qml
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-130830625229760 | Loaded 0 interpretations from project
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:369 | Thread-130830625229760 | Inherited attributes from geology: GeologyUnit
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-130830625229760 | Loaded 0 interpretations from project
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: section_layer = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: section_layer_name = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-130830625229760 | Failed to restore layer for section_layer
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: buffer_dist = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: dem_layer = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: dem_layer_name = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-130830625229760 | Failed to restore layer for dem_layer
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: dem_band = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: scale = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: vert_exag = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: geol_layer = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: geol_layer_name = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-130830625229760 | Failed to restore layer for geol_layer
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: geol_field = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: struct_layer = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: struct_layer_name = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-130830625229760 | Failed to restore layer for struct_layer
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: struct_dip_field = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: struct_strike_field = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: dip_scale_factor = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: dh_collar_layer = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-130830625229760 | Failed to restore layer for dh_collar_layer
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: dh_collar_id = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: dh_use_geom = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: dh_collar_x = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: dh_collar_y = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: dh_collar_z = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: dh_collar_depth = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: dh_survey_layer = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-130830625229760 | Failed to restore layer for dh_survey_layer
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: dh_survey_id = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: dh_survey_depth = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: dh_survey_azim = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: dh_survey_incl = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: dh_interval_layer = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-130830625229760 | Failed to restore layer for dh_interval_layer
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: dh_interval_id = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: dh_interval_from = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: dh_interval_to = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: dh_interval_lith = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: last_output_dir = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: interp_custom_fields = 1.0
2026-01-11 12:27:00 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-130830625229760 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: show_topo = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: show_geol = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: show_struct = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: show_drillholes = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: show_interpretations = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: auto_lod = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: adaptive_sampling = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: max_points = 1.0
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-130830625229760 | Settings loaded successfully from Project/Global config
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:477 | Thread-130830625229760 | Cache cleared by user
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-130830625229760 | GeologyGenerationTask started (Background Thread)
2026-01-11 12:27:00 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-130830625229760 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-130830625229760 | GeologyGenerationTask started (Background Thread)
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-130830625229760 | GeologyGenerationTask finished with 1 segments
2026-01-11 12:27:00 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-130830625229760 | Test Title: Test Message
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-130830625229760 | Test Title: Test Message
2026-01-11 12:27:00 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-130830625229760 | Test Title: Test Message
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:170 | Thread-130830625229760 | CRITICAL_OP: finalize_polygon | points=2
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-130830625229760 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-11 12:27:00 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-130830625229760 | finalize_polygon() aborted - less than 3 points
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:170 | Thread-130830625229760 | CRITICAL_OP: finalize_polygon | points=3
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-130830625229760 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-130830625229760 | finalize_polygon() - emitting polygonFinished signal for 272d5833-c524-401d-afb2-99adb6842614
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-130830625229760 | Interpretation polygon finalized with 3 vertices, ID: 272d5833-c524-401d-afb2-99adb6842614
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-130830625229760 | finalize_polygon() completed
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:170 | Thread-130830625229760 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-130830625229760 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-130830625229760 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-130830625229760 | ProfileInterpretationTool.reset() completed
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:170 | Thread-130830625229760 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-130830625229760 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-130830625229760 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-130830625229760 | ProfileInterpretationTool.reset() completed
2026-01-11 12:27:00 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-130830625229760 | Failed to create locator for layer layer1: mock error
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-130830625229760 | ProfileInterpretationTool.activate() called
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-130830625229760 | ProfileInterpretationTool activated successfully
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-130830625229760 | ProfileInterpretationTool.deactivate() called
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-130830625229760 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-130830625229760 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-130830625229760 | ProfileInterpretationTool.reset() completed
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-130830625229760 | ProfileInterpretationTool deactivated successfully
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: buffer_dist = 100.5
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-130830625229760 | Persistent interpretations cleared by reset
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-130830625229760 | Setting saved to project: test_layer = id_123
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-130830625229760 | Setting saved to project: test_layer_name = RealName
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: test_layer = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-130830625229760 | Project setting hit: test_layer_name = RealName
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-130830625229760 | Restoring layer: test_layer -> RealName
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-130830625229760 | Point 1 added: 0.00, 0.00
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-130830625229760 | Point 2 added: 100.00, 100.00
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-130830625229760 | Point 1 added: 50.00, 50.00
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-130830625229760 | reset() called, finalized=False
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-130830625229760 | finalize_measurement called with 1 points
2026-01-11 12:27:00 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-130830625229760 | Cannot finalize measurement with less than 2 points
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-130830625229760 | finalize_measurement called with 2 points
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-130830625229760 | Setting finalized = True
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-130830625229760 | Measurement finalized: 2 points, 100.00m total distance
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-130830625229760 | Switching to pan tool to stop measurement
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-130830625229760 | Pan tool activated - measurement should be frozen
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-130830625229760 | Ignoring click - measurement is finalized
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-130830625229760 | finalize_measurement called with 2 points
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-130830625229760 | Setting finalized = True
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-130830625229760 | Measurement finalized: 2 points, 100.00m total distance
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-130830625229760 | Switching to pan tool to stop measurement
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-130830625229760 | Pan tool activated - measurement should be frozen
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-130830625229760 | reset() called, finalized=False
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-130830625229760 | reset() called, finalized=False
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-130830625229760 | reset() called, finalized=True
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-130830625229760 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-130830625229760 | reset() called, finalized=False
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-130830625229760 | finalize_measurement called with 2 points
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-130830625229760 | Setting finalized = True
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-130830625229760 | Measurement finalized: 2 points, 100.00m total distance
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-130830625229760 | Rubber band redrawn with final points only
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-130830625229760 | Switching to pan tool to stop measurement
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-130830625229760 | Pan tool activated - measurement should be frozen
2026-01-11 12:27:00 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-130830625229760 | Failed to create locator for layer layer1: mock error
2026-01-11 12:27:00 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-130830625229760 | Failed to create locator for layer l2: fail
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-130830625229760 | ProfileMeasureTool activated
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-130830625229760 | reset() called, finalized=False
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-130830625229760 | ProfileMeasureTool deactivated
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-130830625229760 | create_drillhole_trace_layer called with 1 holes
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-130830625229760 | Adding 1 drillhole trace features to layer
2026-01-11 12:27:00 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-130830625229760 | Failed to create memory layer: Fail
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-130830625229760 | create_drillhole_trace_layer called with 0 holes
2026-01-11 12:27:00 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-130830625229760 | No drillhole data provided for trace layer
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-130830625229760 | create_drillhole_trace_layer called with 1 holes
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-130830625229760 | Skipping hole H1: insufficient trace points (1)
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-130830625229760 | Adding 0 drillhole trace features to layer
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-130830625229760 | create_drillhole_trace_layer called with 1 holes
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130830625229760 | render() called
2026-01-11 12:27:00 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-130830625229760 | No valid layers to render
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130830625229760 | render() called
2026-01-11 12:27:00 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-130830625229760 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130830625229760 | render() called
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130830625229760 | render() called
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130830625229760 | render() called
2026-01-11 12:27:00 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-130830625229760 | No valid layers to render
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130830625229760 | render() called
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130830625229760 | render() called
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-130830625229760 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-130830625229760 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130830625229760 | CacheService initialized (Default TTL: 3600s)
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-130830625229760 | ProfileController initialized
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-130830625229760 | Loaded 0 interpretations from project
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: buffer_dist = 100.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: scale = 50000.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: vert_exag = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: dip_scale_factor = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: auto_lod = True
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-130830625229760 | Settings loaded successfully from Project/Global config
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-130830625229760 | Saved 1 interpretations to project
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130830625229760 | CacheService initialized (Default TTL: 3600s)
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-130830625229760 | ProfileController initialized
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-130830625229760 | Loaded 0 interpretations from project
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: buffer_dist = 100.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: scale = 50000.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: vert_exag = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: dip_scale_factor = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: auto_lod = True
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-130830625229760 | Settings loaded successfully from Project/Global config
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-130830625229760 | Saved 1 interpretations to project
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-130830625229760 | Saved 0 interpretations to project
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130830625229760 | CacheService initialized (Default TTL: 3600s)
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-130830625229760 | ProfileController initialized
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-130830625229760 | Loaded 0 interpretations from project
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: buffer_dist = 100.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: scale = 50000.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: vert_exag = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: dip_scale_factor = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: auto_lod = True
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-130830625229760 | Settings loaded successfully from Project/Global config
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-130830625229760 | Loaded 1 interpretations from project
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-130830625229760 | Point 1 added: 0.00, 0.00
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-130830625229760 | Point 2 added: 10.00, 10.00
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-130830625229760 | finalize_measurement called with 2 points
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-130830625229760 | Setting finalized = True
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-130830625229760 | Measurement finalized: 2 points, 14.14m total distance
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-130830625229760 | Rubber band redrawn with final points only
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-130830625229760 | Switching to pan tool to stop measurement
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-130830625229760 | Pan tool activated - measurement should be frozen
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-130830625229760 | reset() called, finalized=True
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-130830625229760 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-130830625229760 | Point 1 added: 0.00, 0.00
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-130830625229760 | Point 2 added: 100.00, 100.00
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130830625229760 | CacheService initialized (Default TTL: 3600s)
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-130830625229760 | ProfileController initialized
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-130830625229760 | Loaded 1 interpretations from project
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: buffer_dist = 100.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: scale = 50000.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: vert_exag = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: dip_scale_factor = 1.0
2026-01-11 12:27:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130830625229760 | Global setting fallback: auto_lod = True
2026-01-11 12:27:00 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-130830625229760 | Settings loaded successfully from Project/Global config
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-131313286130624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-131313286130624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-131313286130624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-131313286130624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:135 | Thread-131313286130624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:135 | Thread-131313286130624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-131313286130624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-131313286130624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-131313286130624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-131313286130624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-131313286130624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-131313286130624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-131313286130624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-131313286130624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-131313286130624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-131313286130624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-131313286130624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-131313286130624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-131313286130624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-131313286130624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-131313286130624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-131313286130624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-131313286130624 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131313286130624 | Config set: SecInterp/scale = 50000.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131313286130624 | Config set: SecInterp/vert_exag = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131313286130624 | Config set: SecInterp/buffer_dist = 100.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131313286130624 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131313286130624 | Config set: SecInterp/last_output_dir = 
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131313286130624 | Config set: SecInterp/dpi = 300
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131313286130624 | Config set: SecInterp/preview_width = 800
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131313286130624 | Config set: SecInterp/preview_height = 600
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131313286130624 | Config set: SecInterp/sampling_interval = 10.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131313286130624 | Config set: SecInterp/export_quality = 95
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131313286130624 | Config set: SecInterp/auto_lod = True
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131313286130624 | Config set: SecInterp/max_preview_points = 10000
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-131313286130624 | Configuration reset to defaults
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-131313286130624 | Config set: SecInterp/scale = 200.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131313286130624 | CacheService initialized (Default TTL: 3600s)
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131313286130624 | CacheService initialized (Default TTL: 3600s)
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131313286130624 | CacheService initialized (Default TTL: 3600s)
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-131313286130624 | Projecting collars from Test Layer with buffer 50.0m
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-131313286130624 | No collars found within buffer area.
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-131313286130624 | Projecting collars from Test Layer with buffer 50.0m
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-131313286130624 | DrillholeService.project_collars END: Found 1 collars.
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:272 | Thread-131313286130624 | ✓ Saving profile axes...
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:119 | Thread-131313286130624 | ✓ Saving topographic profile...
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:272 | Thread-131313286130624 | ✓ Saving profile axes...
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:234 | Thread-131313286130624 | ✓ Saving interpretation data...
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:263 | Thread-131313286130624 | 3D Export features are restricted for this user.
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:119 | Thread-131313286130624 | ✓ Saving topographic profile...
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:272 | Thread-131313286130624 | ✓ Saving profile axes...
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:234 | Thread-131313286130624 | ✓ Saving interpretation data...
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:246 | Thread-131313286130624 | ✓ Saving 3D interpretation data...
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:119 | Thread-131313286130624 | ✓ Saving topographic profile...
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:272 | Thread-131313286130624 | ✓ Saving profile axes...
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:144 | Thread-131313286130624 | ✓ Saving geological profile...
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:172 | Thread-131313286130624 | ✓ Saving structural profile...
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:208 | Thread-131313286130624 | ✓ Saving drillhole data...
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:234 | Thread-131313286130624 | ✓ Saving interpretation data...
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-131313286130624 | Access denied for restricted feature: 3D Export
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:263 | Thread-131313286130624 | 3D Export features are restricted for this user.
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:119 | Thread-131313286130624 | ✓ Saving topographic profile...
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:272 | Thread-131313286130624 | ✓ Saving profile axes...
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:230 | Thread-131313286130624 | No interpretations provided for export.
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:208 | Thread-131313286130624 | ✓ Saving drillhole data...
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:144 | Thread-131313286130624 | ✓ Saving geological profile...
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:234 | Thread-131313286130624 | ✓ Saving interpretation data...
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:246 | Thread-131313286130624 | ✓ Saving 3D interpretation data...
2026-01-11 12:27:12 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:261 | Thread-131313286130624 | Invalid section line layer, skipping 3D export.
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:234 | Thread-131313286130624 | ✓ Saving interpretation data...
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:172 | Thread-131313286130624 | ✓ Saving structural profile...
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:119 | Thread-131313286130624 | ✓ Saving topographic profile...
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-131313286130624 | Generating master profile with interval=10.00
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-131313286130624 | Generating master profile with interval=50.00
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-131313286130624 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-131313286130624 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-131313286130624 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-131313286130624 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-131313286130624 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-131313286130624 | Running geometry operation: test
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-131313286130624 | Generated 1 drillhole traces
2026-01-11 12:27:12 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-131313286130624 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-11 12:27:12 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-131313286130624 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-131313286130624 | Generated 1 drillhole traces
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-131313286130624 | Drillhole preview skipped: No Collar ID field selected.
2026-01-11 12:27:12 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-131313286130624 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-11 12:27:12 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-131313286130624 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-11 12:27:12 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-131313286130624 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-11 12:27:12 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-131313286130624 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-11 12:27:12 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-131313286130624 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-131313286130624 | Analyzing structures in Structure Layer with buffer 10m
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-131313286130624 | Processed 1 structural measurements from Structure Layer
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-138384283577280 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-138384283577280 | Loaded 0 interpretations from project
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:369 | Thread-138384283577280 | Inherited attributes from geology: GeologyUnit
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-138384283577280 | Loaded 0 interpretations from project
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: section_layer = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: section_layer_name = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138384283577280 | Failed to restore layer for section_layer
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: buffer_dist = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: dem_layer = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: dem_layer_name = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138384283577280 | Failed to restore layer for dem_layer
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: dem_band = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: scale = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: vert_exag = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: geol_layer = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: geol_layer_name = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138384283577280 | Failed to restore layer for geol_layer
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: geol_field = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: struct_layer = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: struct_layer_name = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138384283577280 | Failed to restore layer for struct_layer
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: struct_dip_field = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: struct_strike_field = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: dip_scale_factor = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: dh_collar_layer = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138384283577280 | Failed to restore layer for dh_collar_layer
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: dh_collar_id = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: dh_use_geom = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: dh_collar_x = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: dh_collar_y = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: dh_collar_z = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: dh_collar_depth = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: dh_survey_layer = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138384283577280 | Failed to restore layer for dh_survey_layer
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: dh_survey_id = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: dh_survey_depth = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: dh_survey_azim = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: dh_survey_incl = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: dh_interval_layer = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138384283577280 | Failed to restore layer for dh_interval_layer
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: dh_interval_id = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: dh_interval_from = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: dh_interval_to = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: dh_interval_lith = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: last_output_dir = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: interp_custom_fields = 1.0
2026-01-11 12:27:12 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-138384283577280 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: show_topo = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: show_geol = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: show_struct = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: show_drillholes = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: show_interpretations = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: auto_lod = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: adaptive_sampling = 1.0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: max_points = 1.0
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-138384283577280 | Settings loaded successfully from Project/Global config
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:477 | Thread-138384283577280 | Cache cleared by user
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-138384283577280 | GeologyGenerationTask started (Background Thread)
2026-01-11 12:27:12 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-138384283577280 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-138384283577280 | GeologyGenerationTask started (Background Thread)
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-138384283577280 | GeologyGenerationTask finished with 1 segments
2026-01-11 12:27:12 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-138384283577280 | Test Title: Test Message
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-138384283577280 | Test Title: Test Message
2026-01-11 12:27:12 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-138384283577280 | Test Title: Test Message
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:170 | Thread-138384283577280 | CRITICAL_OP: finalize_polygon | points=2
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-138384283577280 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-11 12:27:12 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-138384283577280 | finalize_polygon() aborted - less than 3 points
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:170 | Thread-138384283577280 | CRITICAL_OP: finalize_polygon | points=3
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-138384283577280 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-138384283577280 | finalize_polygon() - emitting polygonFinished signal for 1605d3ba-70cc-46ed-9cb2-cc6f9f09628a
2026-01-11 12:27:12 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-138384283577280 | Interpretation polygon finalized with 3 vertices, ID: 1605d3ba-70cc-46ed-9cb2-cc6f9f09628a
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-138384283577280 | finalize_polygon() completed
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:170 | Thread-138384283577280 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-138384283577280 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-138384283577280 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-138384283577280 | ProfileInterpretationTool.reset() completed
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:170 | Thread-138384283577280 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-138384283577280 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-138384283577280 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-138384283577280 | ProfileInterpretationTool.reset() completed
2026-01-11 12:27:12 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-138384283577280 | Failed to create locator for layer layer1: mock error
2026-01-11 12:27:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-138384283577280 | ProfileInterpretationTool.activate() called
2026-01-11 12:27:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-138384283577280 | ProfileInterpretationTool activated successfully
2026-01-11 12:27:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-138384283577280 | ProfileInterpretationTool.deactivate() called
2026-01-11 12:27:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-138384283577280 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-11 12:27:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-138384283577280 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-11 12:27:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-138384283577280 | ProfileInterpretationTool.reset() completed
2026-01-11 12:27:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-138384283577280 | ProfileInterpretationTool deactivated successfully
2026-01-11 12:27:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: buffer_dist = 100.5
2026-01-11 12:27:13 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-138384283577280 | Persistent interpretations cleared by reset
2026-01-11 12:27:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-138384283577280 | Setting saved to project: test_layer = id_123
2026-01-11 12:27:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-138384283577280 | Setting saved to project: test_layer_name = RealName
2026-01-11 12:27:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138384283577280 | Global setting fallback: test_layer = 1.0
2026-01-11 12:27:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-138384283577280 | Project setting hit: test_layer_name = RealName
2026-01-11 12:27:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-138384283577280 | Restoring layer: test_layer -> RealName
2026-01-11 12:27:13 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-138384283577280 | Point 1 added: 0.00, 0.00
2026-01-11 12:27:13 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-138384283577280 | Point 2 added: 100.00, 100.00
2026-01-11 12:27:13 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-138384283577280 | Point 1 added: 50.00, 50.00
2026-01-11 12:27:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138384283577280 | reset() called, finalized=False
2026-01-11 12:27:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-138384283577280 | finalize_measurement called with 1 points
2026-01-11 12:27:13 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-138384283577280 | Cannot finalize measurement with less than 2 points
2026-01-11 12:27:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-138384283577280 | finalize_measurement called with 2 points
2026-01-11 12:27:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-138384283577280 | Setting finalized = True
2026-01-11 12:27:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-138384283577280 | Measurement finalized: 2 points, 100.00m total distance
2026-01-11 12:27:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-138384283577280 | Switching to pan tool to stop measurement
2026-01-11 12:27:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-138384283577280 | Pan tool activated - measurement should be frozen
2026-01-11 12:27:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-138384283577280 | Ignoring click - measurement is finalized
2026-01-11 12:27:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-138384283577280 | finalize_measurement called with 2 points
2026-01-11 12:27:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-138384283577280 | Setting finalized = True
2026-01-11 12:27:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-138384283577280 | Measurement finalized: 2 points, 100.00m total distance
2026-01-11 12:27:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-138384283577280 | Switching to pan tool to stop measurement
2026-01-11 12:27:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-138384283577280 | Pan tool activated - measurement should be frozen
2026-01-11 12:27:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138384283577280 | reset() called, finalized=False
2026-01-11 12:27:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138384283577280 | reset() called, finalized=False
2026-01-11 12:27:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138384283577280 | reset() called, finalized=True
2026-01-11 12:27:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-138384283577280 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-11 12:27:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138384283577280 | reset() called, finalized=False
2026-01-11 12:27:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-138384283577280 | finalize_measurement called with 2 points
2026-01-11 12:27:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-138384283577280 | Setting finalized = True
2026-01-11 12:27:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-138384283577280 | Measurement finalized: 2 points, 100.00m total distance
2026-01-11 12:27:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-138384283577280 | Rubber band redrawn with final points only
2026-01-11 12:27:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-138384283577280 | Switching to pan tool to stop measurement
2026-01-11 12:27:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-138384283577280 | Pan tool activated - measurement should be frozen
2026-01-11 12:27:13 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-138384283577280 | Failed to create locator for layer layer1: mock error
2026-01-11 12:27:13 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-138384283577280 | Failed to create locator for layer l2: fail
2026-01-11 12:27:13 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-138384283577280 | ProfileMeasureTool activated
2026-01-11 12:27:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138384283577280 | reset() called, finalized=False
2026-01-11 12:27:13 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-138384283577280 | ProfileMeasureTool deactivated
2026-01-11 12:27:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138384283577280 | create_drillhole_trace_layer called with 1 holes
2026-01-11 12:27:13 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-138384283577280 | Adding 1 drillhole trace features to layer
2026-01-11 12:27:13 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-138384283577280 | Failed to create memory layer: Fail
2026-01-11 12:27:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138384283577280 | create_drillhole_trace_layer called with 0 holes
2026-01-11 12:27:13 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-138384283577280 | No drillhole data provided for trace layer
2026-01-11 12:27:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138384283577280 | create_drillhole_trace_layer called with 1 holes
2026-01-11 12:27:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-138384283577280 | Skipping hole H1: insufficient trace points (1)
2026-01-11 12:27:13 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-138384283577280 | Adding 0 drillhole trace features to layer
2026-01-11 12:27:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138384283577280 | create_drillhole_trace_layer called with 1 holes
2026-01-11 12:27:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138384283577280 | render() called
2026-01-11 12:27:13 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-138384283577280 | No valid layers to render
2026-01-11 12:27:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138384283577280 | render() called
2026-01-11 12:27:13 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-138384283577280 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-11 12:27:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138384283577280 | render() called
2026-01-11 12:27:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138384283577280 | render() called
2026-01-11 12:27:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138384283577280 | render() called
2026-01-11 12:27:13 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-138384283577280 | No valid layers to render
2026-01-11 12:27:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138384283577280 | render() called
2026-01-11 12:27:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138384283577280 | render() called
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:135 | Thread-138741156895680 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138741156895680 | Config set: SecInterp/scale = 50000.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138741156895680 | Config set: SecInterp/vert_exag = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138741156895680 | Config set: SecInterp/buffer_dist = 100.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138741156895680 | Config set: SecInterp/dip_scale_factor = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138741156895680 | Config set: SecInterp/last_output_dir = 
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138741156895680 | Config set: SecInterp/dpi = 300
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138741156895680 | Config set: SecInterp/preview_width = 800
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138741156895680 | Config set: SecInterp/preview_height = 600
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138741156895680 | Config set: SecInterp/sampling_interval = 10.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138741156895680 | Config set: SecInterp/export_quality = 95
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138741156895680 | Config set: SecInterp/auto_lod = True
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138741156895680 | Config set: SecInterp/max_preview_points = 10000
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:86 | Thread-138741156895680 | Configuration reset to defaults
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.config | set:80 | Thread-138741156895680 | Config set: SecInterp/scale = 200.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138741156895680 | CacheService initialized (Default TTL: 3600s)
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138741156895680 | CacheService initialized (Default TTL: 3600s)
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138741156895680 | CacheService initialized (Default TTL: 3600s)
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-138741156895680 | Projecting collars from Test Layer with buffer 50.0m
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-138741156895680 | No collars found within buffer area.
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-138741156895680 | Projecting collars from Test Layer with buffer 50.0m
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-138741156895680 | DrillholeService.project_collars END: Found 1 collars.
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:272 | Thread-138741156895680 | ✓ Saving profile axes...
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:119 | Thread-138741156895680 | ✓ Saving topographic profile...
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:272 | Thread-138741156895680 | ✓ Saving profile axes...
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:234 | Thread-138741156895680 | ✓ Saving interpretation data...
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:263 | Thread-138741156895680 | 3D Export features are restricted for this user.
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:119 | Thread-138741156895680 | ✓ Saving topographic profile...
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:272 | Thread-138741156895680 | ✓ Saving profile axes...
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:234 | Thread-138741156895680 | ✓ Saving interpretation data...
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:246 | Thread-138741156895680 | ✓ Saving 3D interpretation data...
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:119 | Thread-138741156895680 | ✓ Saving topographic profile...
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:272 | Thread-138741156895680 | ✓ Saving profile axes...
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:144 | Thread-138741156895680 | ✓ Saving geological profile...
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:172 | Thread-138741156895680 | ✓ Saving structural profile...
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:208 | Thread-138741156895680 | ✓ Saving drillhole data...
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:234 | Thread-138741156895680 | ✓ Saving interpretation data...
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-138741156895680 | Access denied for restricted feature: 3D Export
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:263 | Thread-138741156895680 | 3D Export features are restricted for this user.
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:119 | Thread-138741156895680 | ✓ Saving topographic profile...
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:272 | Thread-138741156895680 | ✓ Saving profile axes...
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:230 | Thread-138741156895680 | No interpretations provided for export.
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:208 | Thread-138741156895680 | ✓ Saving drillhole data...
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:144 | Thread-138741156895680 | ✓ Saving geological profile...
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:234 | Thread-138741156895680 | ✓ Saving interpretation data...
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:246 | Thread-138741156895680 | ✓ Saving 3D interpretation data...
2026-01-12 00:34:14 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:261 | Thread-138741156895680 | Invalid section line layer, skipping 3D export.
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:234 | Thread-138741156895680 | ✓ Saving interpretation data...
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:172 | Thread-138741156895680 | ✓ Saving structural profile...
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:119 | Thread-138741156895680 | ✓ Saving topographic profile...
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-138741156895680 | Generating master profile with interval=10.00
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-138741156895680 | Generating master profile with interval=50.00
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-138741156895680 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-138741156895680 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-138741156895680 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-138741156895680 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-138741156895680 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-138741156895680 | Running geometry operation: test
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-138741156895680 | Generated 1 drillhole traces
2026-01-12 00:34:14 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-138741156895680 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-12 00:34:14 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-138741156895680 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-138741156895680 | Generated 1 drillhole traces
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-138741156895680 | Drillhole preview skipped: No Collar ID field selected.
2026-01-12 00:34:14 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-138741156895680 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-12 00:34:14 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-138741156895680 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-12 00:34:14 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-138741156895680 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-12 00:34:14 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-138741156895680 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-12 00:34:14 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-138741156895680 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-138741156895680 | Analyzing structures in Structure Layer with buffer 10m
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-138741156895680 | Processed 1 structural measurements from Structure Layer
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-138741156895680 | Successfully exported to /tmp/test_dynamic.shp
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-138741156895680 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-138741156895680 | Generated QML style: /tmp/test.qml
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-138741156895680 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-138741156895680 | Generated QML style: dummy.qml
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-138741156895680 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-138741156895680 | Generated QML style: dummy.qml
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-138741156895680 | Loaded 0 interpretations from project
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:369 | Thread-138741156895680 | Inherited attributes from geology: GeologyUnit
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-138741156895680 | Loaded 0 interpretations from project
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: section_layer = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: section_layer_name = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138741156895680 | Failed to restore layer for section_layer
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: buffer_dist = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: dem_layer = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: dem_layer_name = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138741156895680 | Failed to restore layer for dem_layer
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: dem_band = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: scale = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: vert_exag = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: geol_layer = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: geol_layer_name = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138741156895680 | Failed to restore layer for geol_layer
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: geol_field = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: struct_layer = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: struct_layer_name = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138741156895680 | Failed to restore layer for struct_layer
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: struct_dip_field = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: struct_strike_field = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: dip_scale_factor = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: dh_collar_layer = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138741156895680 | Failed to restore layer for dh_collar_layer
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: dh_collar_id = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: dh_use_geom = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: dh_collar_x = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: dh_collar_y = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: dh_collar_z = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: dh_collar_depth = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: dh_survey_layer = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138741156895680 | Failed to restore layer for dh_survey_layer
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: dh_survey_id = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: dh_survey_depth = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: dh_survey_azim = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: dh_survey_incl = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: dh_interval_layer = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138741156895680 | Failed to restore layer for dh_interval_layer
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: dh_interval_id = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: dh_interval_from = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: dh_interval_to = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: dh_interval_lith = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: last_output_dir = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: interp_custom_fields = 1.0
2026-01-12 00:34:14 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-138741156895680 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: show_topo = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: show_geol = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: show_struct = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: show_drillholes = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: show_interpretations = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: auto_lod = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: adaptive_sampling = 1.0
2026-01-12 00:34:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: max_points = 1.0
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-138741156895680 | Settings loaded successfully from Project/Global config
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:477 | Thread-138741156895680 | Cache cleared by user
2026-01-12 00:34:14 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-138741156895680 | GeologyGenerationTask started (Background Thread)
2026-01-12 00:34:14 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-138741156895680 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-138741156895680 | GeologyGenerationTask started (Background Thread)
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-138741156895680 | GeologyGenerationTask finished with 1 segments
2026-01-12 00:34:15 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-138741156895680 | Test Title: Test Message
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-138741156895680 | Test Title: Test Message
2026-01-12 00:34:15 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-138741156895680 | Test Title: Test Message
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:170 | Thread-138741156895680 | CRITICAL_OP: finalize_polygon | points=2
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-138741156895680 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-12 00:34:15 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-138741156895680 | finalize_polygon() aborted - less than 3 points
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:170 | Thread-138741156895680 | CRITICAL_OP: finalize_polygon | points=3
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-138741156895680 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-138741156895680 | finalize_polygon() - emitting polygonFinished signal for a6b65fb8-809d-47b5-b6a3-8addacf90fb8
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-138741156895680 | Interpretation polygon finalized with 3 vertices, ID: a6b65fb8-809d-47b5-b6a3-8addacf90fb8
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-138741156895680 | finalize_polygon() completed
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:170 | Thread-138741156895680 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-138741156895680 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-138741156895680 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-138741156895680 | ProfileInterpretationTool.reset() completed
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:170 | Thread-138741156895680 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-138741156895680 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-138741156895680 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-138741156895680 | ProfileInterpretationTool.reset() completed
2026-01-12 00:34:15 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-138741156895680 | Failed to create locator for layer layer1: mock error
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-138741156895680 | ProfileInterpretationTool.activate() called
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-138741156895680 | ProfileInterpretationTool activated successfully
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-138741156895680 | ProfileInterpretationTool.deactivate() called
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-138741156895680 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-138741156895680 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-138741156895680 | ProfileInterpretationTool.reset() completed
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-138741156895680 | ProfileInterpretationTool deactivated successfully
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: buffer_dist = 100.5
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-138741156895680 | Persistent interpretations cleared by reset
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-138741156895680 | Setting saved to project: test_layer = id_123
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-138741156895680 | Setting saved to project: test_layer_name = RealName
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: test_layer = 1.0
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-138741156895680 | Project setting hit: test_layer_name = RealName
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-138741156895680 | Restoring layer: test_layer -> RealName
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-138741156895680 | Point 1 added: 0.00, 0.00
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-138741156895680 | Point 2 added: 100.00, 100.00
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-138741156895680 | Point 1 added: 50.00, 50.00
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138741156895680 | reset() called, finalized=False
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-138741156895680 | finalize_measurement called with 1 points
2026-01-12 00:34:15 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-138741156895680 | Cannot finalize measurement with less than 2 points
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-138741156895680 | finalize_measurement called with 2 points
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-138741156895680 | Setting finalized = True
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-138741156895680 | Measurement finalized: 2 points, 100.00m total distance
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-138741156895680 | Switching to pan tool to stop measurement
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-138741156895680 | Pan tool activated - measurement should be frozen
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-138741156895680 | Ignoring click - measurement is finalized
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-138741156895680 | finalize_measurement called with 2 points
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-138741156895680 | Setting finalized = True
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-138741156895680 | Measurement finalized: 2 points, 100.00m total distance
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-138741156895680 | Switching to pan tool to stop measurement
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-138741156895680 | Pan tool activated - measurement should be frozen
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138741156895680 | reset() called, finalized=False
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138741156895680 | reset() called, finalized=False
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138741156895680 | reset() called, finalized=True
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-138741156895680 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138741156895680 | reset() called, finalized=False
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-138741156895680 | finalize_measurement called with 2 points
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-138741156895680 | Setting finalized = True
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-138741156895680 | Measurement finalized: 2 points, 100.00m total distance
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-138741156895680 | Rubber band redrawn with final points only
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-138741156895680 | Switching to pan tool to stop measurement
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-138741156895680 | Pan tool activated - measurement should be frozen
2026-01-12 00:34:15 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-138741156895680 | Failed to create locator for layer layer1: mock error
2026-01-12 00:34:15 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-138741156895680 | Failed to create locator for layer l2: fail
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-138741156895680 | ProfileMeasureTool activated
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138741156895680 | reset() called, finalized=False
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-138741156895680 | ProfileMeasureTool deactivated
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138741156895680 | create_drillhole_trace_layer called with 1 holes
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-138741156895680 | Adding 1 drillhole trace features to layer
2026-01-12 00:34:15 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-138741156895680 | Failed to create memory layer: Fail
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138741156895680 | create_drillhole_trace_layer called with 0 holes
2026-01-12 00:34:15 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-138741156895680 | No drillhole data provided for trace layer
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138741156895680 | create_drillhole_trace_layer called with 1 holes
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-138741156895680 | Skipping hole H1: insufficient trace points (1)
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-138741156895680 | Adding 0 drillhole trace features to layer
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138741156895680 | create_drillhole_trace_layer called with 1 holes
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138741156895680 | render() called
2026-01-12 00:34:15 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-138741156895680 | No valid layers to render
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138741156895680 | render() called
2026-01-12 00:34:15 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-138741156895680 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138741156895680 | render() called
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138741156895680 | render() called
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138741156895680 | render() called
2026-01-12 00:34:15 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-138741156895680 | No valid layers to render
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138741156895680 | render() called
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138741156895680 | render() called
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-138741156895680 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-138741156895680 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138741156895680 | CacheService initialized (Default TTL: 3600s)
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-138741156895680 | ProfileController initialized
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-138741156895680 | Loaded 0 interpretations from project
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: buffer_dist = 100.0
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: scale = 50000.0
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: vert_exag = 1.0
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: dip_scale_factor = 1.0
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: auto_lod = True
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-138741156895680 | Settings loaded successfully from Project/Global config
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-138741156895680 | Saved 1 interpretations to project
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138741156895680 | CacheService initialized (Default TTL: 3600s)
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-138741156895680 | ProfileController initialized
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-138741156895680 | Loaded 0 interpretations from project
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: buffer_dist = 100.0
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: scale = 50000.0
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: vert_exag = 1.0
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: dip_scale_factor = 1.0
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: auto_lod = True
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-138741156895680 | Settings loaded successfully from Project/Global config
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-138741156895680 | Saved 1 interpretations to project
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-138741156895680 | Saved 0 interpretations to project
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138741156895680 | CacheService initialized (Default TTL: 3600s)
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-138741156895680 | ProfileController initialized
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-138741156895680 | Loaded 0 interpretations from project
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: buffer_dist = 100.0
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: scale = 50000.0
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: vert_exag = 1.0
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: dip_scale_factor = 1.0
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: auto_lod = True
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-138741156895680 | Settings loaded successfully from Project/Global config
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-138741156895680 | Loaded 1 interpretations from project
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-138741156895680 | Point 1 added: 0.00, 0.00
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-138741156895680 | Point 2 added: 10.00, 10.00
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-138741156895680 | finalize_measurement called with 2 points
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-138741156895680 | Setting finalized = True
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-138741156895680 | Measurement finalized: 2 points, 14.14m total distance
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-138741156895680 | Rubber band redrawn with final points only
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-138741156895680 | Switching to pan tool to stop measurement
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-138741156895680 | Pan tool activated - measurement should be frozen
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138741156895680 | reset() called, finalized=True
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-138741156895680 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-138741156895680 | Point 1 added: 0.00, 0.00
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-138741156895680 | Point 2 added: 100.00, 100.00
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138741156895680 | CacheService initialized (Default TTL: 3600s)
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-138741156895680 | ProfileController initialized
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-138741156895680 | Loaded 1 interpretations from project
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: buffer_dist = 100.0
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: scale = 50000.0
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: vert_exag = 1.0
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: dip_scale_factor = 1.0
2026-01-12 00:34:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138741156895680 | Global setting fallback: auto_lod = True
2026-01-12 00:34:15 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-138741156895680 | Settings loaded successfully from Project/Global config
2026-01-12 00:35:08 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:135 | Thread-139357538220992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:35:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-139357538220992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:35:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-139357538220992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:35:08 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-139357538220992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:35:08 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-139357538220992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:35:08 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:135 | Thread-139357538220992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:35:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:135 | Thread-139357538220992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:35:09 | DEBUG    | SecInterp.sec_interp.core.utils.resource_manager | get_logger:135 | Thread-139357538220992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:35:10 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:135 | Thread-139357538220992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:35:10 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:135 | Thread-139357538220992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:35:10 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:135 | Thread-139357538220992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:35:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:135 | Thread-139357538220992 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:48:41 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:135 | Thread-140153672444864 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:48:41 | DEBUG    | SecInterp.sec_interp.core.config | set:196 | Thread-140153672444864 | Config set: SecInterp/scale = 20000.0
2026-01-12 00:58:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-124384524000192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:58:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-124384524000192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:58:46 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-124384524000192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:58:46 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-124384524000192 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:59:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-128540623137728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:59:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-128540623137728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:59:55 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-128540623137728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 00:59:55 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-128540623137728 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:00:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-134432838613952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:00:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-134432838613952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:00:32 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-134432838613952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:00:32 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-134432838613952 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:01:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-125133857872832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:01:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-125133857872832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:01:38 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-125133857872832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:01:38 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-125133857872832 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:01:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:135 | Thread-138557243694016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:01:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:135 | Thread-138557243694016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:01:46 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:135 | Thread-138557243694016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:01:46 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:135 | Thread-138557243694016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:01:46 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:135 | Thread-138557243694016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:01:46 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:135 | Thread-138557243694016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:01:46 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:135 | Thread-138557243694016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:01:46 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:135 | Thread-138557243694016 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:01:46 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-138557243694016 | Projecting collars from Test Layer with buffer 50.0m
2026-01-12 01:01:46 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-138557243694016 | No collars found within buffer area.
2026-01-12 01:02:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:136 | Thread-126718885309376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:02:26 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:136 | Thread-126718885309376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:02:26 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:136 | Thread-126718885309376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:02:26 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:136 | Thread-126718885309376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:02:26 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:136 | Thread-126718885309376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:02:26 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:136 | Thread-126718885309376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:02:26 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:136 | Thread-126718885309376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:02:26 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:136 | Thread-126718885309376 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:02:26 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-126718885309376 | Projecting collars from Test Layer with buffer 50.0m
2026-01-12 01:02:26 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-126718885309376 | No collars found within buffer area.
2026-01-12 01:02:26 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-126718885309376 | Projecting collars from Test Layer with buffer 50.0m
2026-01-12 01:02:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:136 | Thread-130871930416064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:02:41 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:136 | Thread-130871930416064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:02:41 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:136 | Thread-130871930416064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:02:41 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:136 | Thread-130871930416064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:02:41 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:136 | Thread-130871930416064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:02:41 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:136 | Thread-130871930416064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:02:41 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:136 | Thread-130871930416064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:02:41 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:136 | Thread-130871930416064 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:02:41 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-130871930416064 | Projecting collars from Test Layer with buffer 50.0m
2026-01-12 01:02:41 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-130871930416064 | No collars found within buffer area.
2026-01-12 01:02:41 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-130871930416064 | Projecting collars from Test Layer with buffer 50.0m
2026-01-12 01:02:41 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-130871930416064 | DrillholeService.project_collars END: Found 1 collars.
2026-01-12 01:02:52 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:136 | Thread-130615715507136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:02:52 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:136 | Thread-130615715507136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:02:52 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:136 | Thread-130615715507136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:02:52 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:136 | Thread-130615715507136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:02:52 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:136 | Thread-130615715507136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:02:52 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:136 | Thread-130615715507136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:02:52 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_3d_exporter | get_logger:136 | Thread-130615715507136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:02:52 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:136 | Thread-130615715507136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:02:52 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:136 | Thread-130615715507136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:02:52 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:136 | Thread-130615715507136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:02:52 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:136 | Thread-130615715507136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:02:52 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:136 | Thread-130615715507136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:02:52 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:136 | Thread-130615715507136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:02:52 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:136 | Thread-130615715507136 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:03:17 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:136 | Thread-131683187162048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:03:17 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:136 | Thread-131683187162048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:03:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:136 | Thread-131683187162048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:03:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:136 | Thread-131683187162048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:03:17 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:136 | Thread-131683187162048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:03:17 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:136 | Thread-131683187162048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:03:17 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_3d_exporter | get_logger:136 | Thread-131683187162048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:03:17 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:136 | Thread-131683187162048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:03:17 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:136 | Thread-131683187162048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:03:17 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:136 | Thread-131683187162048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:03:17 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:136 | Thread-131683187162048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:03:17 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:136 | Thread-131683187162048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:03:17 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:136 | Thread-131683187162048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:03:17 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:136 | Thread-131683187162048 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:03:37 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:136 | Thread-124353036721088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:03:37 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:136 | Thread-124353036721088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:03:37 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:136 | Thread-124353036721088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:03:37 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:136 | Thread-124353036721088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:03:37 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:136 | Thread-124353036721088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:03:37 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:136 | Thread-124353036721088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:03:37 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_3d_exporter | get_logger:136 | Thread-124353036721088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:03:37 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:136 | Thread-124353036721088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:03:37 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:136 | Thread-124353036721088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:03:37 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:136 | Thread-124353036721088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:03:37 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:136 | Thread-124353036721088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:03:37 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:136 | Thread-124353036721088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:03:37 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:136 | Thread-124353036721088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:03:37 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:136 | Thread-124353036721088 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:04:05 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:136 | Thread-137551887453120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:04:05 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:136 | Thread-137551887453120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:04:05 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:136 | Thread-137551887453120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:04:05 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:136 | Thread-137551887453120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:04:05 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:136 | Thread-137551887453120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:04:05 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:136 | Thread-137551887453120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:04:05 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_3d_exporter | get_logger:136 | Thread-137551887453120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:04:05 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:136 | Thread-137551887453120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:04:05 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:136 | Thread-137551887453120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:04:05 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:136 | Thread-137551887453120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:04:05 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:136 | Thread-137551887453120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:04:05 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:136 | Thread-137551887453120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:04:05 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:136 | Thread-137551887453120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:04:05 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:136 | Thread-137551887453120 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:05:03 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:136 | Thread-125285082016704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:05:03 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:136 | Thread-125285082016704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:05:03 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:136 | Thread-125285082016704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:05:03 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:136 | Thread-125285082016704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:05:03 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:136 | Thread-125285082016704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:05:03 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:136 | Thread-125285082016704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:05:03 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_3d_exporter | get_logger:136 | Thread-125285082016704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:05:03 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:136 | Thread-125285082016704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:05:03 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:136 | Thread-125285082016704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:05:03 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:136 | Thread-125285082016704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:05:03 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:136 | Thread-125285082016704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:05:03 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:136 | Thread-125285082016704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:05:03 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:136 | Thread-125285082016704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:05:03 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:136 | Thread-125285082016704 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:05:59 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:136 | Thread-137473573419968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:05:59 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:136 | Thread-137473573419968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:05:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:136 | Thread-137473573419968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:05:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:136 | Thread-137473573419968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:05:59 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:136 | Thread-137473573419968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:05:59 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:136 | Thread-137473573419968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:05:59 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_3d_exporter | get_logger:136 | Thread-137473573419968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:05:59 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:136 | Thread-137473573419968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:05:59 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:136 | Thread-137473573419968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:05:59 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:136 | Thread-137473573419968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:05:59 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:136 | Thread-137473573419968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:05:59 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:136 | Thread-137473573419968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:05:59 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:136 | Thread-137473573419968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:05:59 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:136 | Thread-137473573419968 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:06:51 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:136 | Thread-123277426129856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:06:51 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:136 | Thread-123277426129856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:06:51 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:136 | Thread-123277426129856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:06:51 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:136 | Thread-123277426129856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:06:51 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:136 | Thread-123277426129856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:06:51 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:136 | Thread-123277426129856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:06:51 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_3d_exporter | get_logger:136 | Thread-123277426129856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:06:51 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:136 | Thread-123277426129856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:06:51 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:136 | Thread-123277426129856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:06:51 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:136 | Thread-123277426129856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:06:51 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:136 | Thread-123277426129856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:06:51 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:136 | Thread-123277426129856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:06:51 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:136 | Thread-123277426129856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:06:51 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:136 | Thread-123277426129856 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:07:47 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:136 | Thread-135169347816384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:07:47 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:136 | Thread-135169347816384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:07:47 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:136 | Thread-135169347816384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:07:47 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:136 | Thread-135169347816384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:07:47 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:136 | Thread-135169347816384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:07:47 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:136 | Thread-135169347816384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:07:47 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_3d_exporter | get_logger:136 | Thread-135169347816384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:07:47 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:136 | Thread-135169347816384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:07:47 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:136 | Thread-135169347816384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:07:47 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:136 | Thread-135169347816384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:07:47 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:136 | Thread-135169347816384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:07:47 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:136 | Thread-135169347816384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:07:47 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:136 | Thread-135169347816384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:07:47 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:136 | Thread-135169347816384 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:08:16 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:136 | Thread-136656663759808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:08:16 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:136 | Thread-136656663759808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:08:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:136 | Thread-136656663759808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:08:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:136 | Thread-136656663759808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:08:16 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:136 | Thread-136656663759808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:08:16 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:136 | Thread-136656663759808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:08:16 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_3d_exporter | get_logger:136 | Thread-136656663759808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:08:16 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:136 | Thread-136656663759808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:08:16 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:136 | Thread-136656663759808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:08:16 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:136 | Thread-136656663759808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:08:16 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:136 | Thread-136656663759808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:08:16 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:136 | Thread-136656663759808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:08:16 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:136 | Thread-136656663759808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:08:16 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:136 | Thread-136656663759808 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_3d_exporter | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:136 | Thread-132960142097344 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 01:12:03 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:211 | Thread-132960142097344 | Configuration reset to defaults initiated
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.core.config | set:200 | Thread-132960142097344 | Config set: SecInterp/scale = 200.0
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.core.config | set:200 | Thread-132960142097344 | Config set: SecInterp/scale = 20000.0
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132960142097344 | CacheService initialized (Default TTL: 3600s)
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132960142097344 | CacheService initialized (Default TTL: 3600s)
2026-01-12 01:12:03 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132960142097344 | CacheService initialized (Default TTL: 3600s)
2026-01-12 01:12:03 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-132960142097344 | Projecting collars from Test Layer with buffer 50.0m
2026-01-12 01:12:03 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-132960142097344 | No collars found within buffer area.
2026-01-12 01:12:03 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-132960142097344 | Projecting collars from Test Layer with buffer 50.0m
2026-01-12 01:12:03 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-132960142097344 | DrillholeService.project_collars END: Found 1 collars.
2026-01-12 01:12:03 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:317 | Thread-132960142097344 | ✓ Saving profile axes...
2026-01-12 01:12:03 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-132960142097344 | ✓ Saving topographic profile...
2026-01-12 01:12:03 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:317 | Thread-132960142097344 | ✓ Saving profile axes...
2026-01-12 01:12:03 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:279 | Thread-132960142097344 | ✓ Saving interpretation data...
2026-01-12 01:12:03 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:308 | Thread-132960142097344 | 3D Export features are restricted for this user.
2026-01-12 01:12:03 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-132960142097344 | ✓ Saving topographic profile...
2026-01-12 01:12:03 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:317 | Thread-132960142097344 | ✓ Saving profile axes...
2026-01-12 01:12:03 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:279 | Thread-132960142097344 | ✓ Saving interpretation data...
2026-01-12 01:12:03 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-132960142097344 | ✓ Saving 3D interpretation data...
2026-01-12 01:12:03 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-132960142097344 | ✓ Saving topographic profile...
2026-01-12 01:12:03 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:317 | Thread-132960142097344 | ✓ Saving profile axes...
2026-01-12 01:12:03 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-132960142097344 | ✓ Saving geological profile...
2026-01-12 01:12:03 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-132960142097344 | ✓ Saving structural profile...
2026-01-12 01:12:03 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-132960142097344 | ✓ Saving drillhole data...
2026-01-12 01:12:03 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:279 | Thread-132960142097344 | ✓ Saving interpretation data...
2026-01-12 01:12:03 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-132960142097344 | ✓ Saving 3D interpretation data...
2026-01-12 01:12:03 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-132960142097344 | ✓ Saving topographic profile...
2026-01-12 01:12:03 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:317 | Thread-132960142097344 | ✓ Saving profile axes...
2026-01-12 01:12:03 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:275 | Thread-132960142097344 | No interpretations provided for export.
2026-01-12 01:12:03 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-132960142097344 | ✓ Saving drillhole data...
2026-01-12 01:12:03 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-132960142097344 | ✓ Saving geological profile...
2026-01-12 01:12:03 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:279 | Thread-132960142097344 | ✓ Saving interpretation data...
2026-01-12 01:12:03 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-132960142097344 | ✓ Saving 3D interpretation data...
2026-01-12 01:12:03 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:306 | Thread-132960142097344 | Invalid section line layer, skipping 3D export.
2026-01-12 01:12:03 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:279 | Thread-132960142097344 | ✓ Saving interpretation data...
2026-01-12 01:12:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-132960142097344 | ✓ Saving structural profile...
2026-01-12 01:12:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-132960142097344 | ✓ Saving topographic profile...
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-132960142097344 | Generating master profile with interval=50.00
2026-01-12 01:12:04 | WARNING  | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:308 | Thread-132960142097344 | Failed to generate master grid: Expected LineGeometry, got <MagicMock name='mock.QgsWkbTypes.geometryType()' id='132960050503632'>
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-132960142097344 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-132960142097344 | LOD Decimation: 100 -> 0 points (tol=10.00)
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-132960142097344 | LOD Decimation: 3 -> 0 points (tol=1.00)
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-132960142097344 | Running geometry operation: test
2026-01-12 01:12:04 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-132960142097344 | Generated 1 drillhole traces
2026-01-12 01:12:04 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-132960142097344 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-12 01:12:04 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-132960142097344 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-12 01:12:04 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-132960142097344 | Generated 1 drillhole traces
2026-01-12 01:12:04 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-132960142097344 | Drillhole preview skipped: No Collar ID field selected.
2026-01-12 01:12:04 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-132960142097344 | Failed to process drillhole intervals: ValueError: not enough values to unpack (expected 2, got 0)
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
2026-01-12 01:12:04 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-132960142097344 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
2026-01-12 01:12:04 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-132960142097344 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-12 01:12:04 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-132960142097344 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-12 01:12:04 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-132960142097344 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-12 01:12:04 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-132960142097344 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 103, in export
    self._write_geology_features(writer, geology_data, fields)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 122, in _write_geology_features
    feat = self._create_geology_feature(segment, fields)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 150, in _create_geology_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-12 01:12:04 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-132960142097344 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 189, in export
    self._write_structure_features(writer, structural_data, fields, line_length)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 210, in _write_structure_features
    feat = self._create_structure_feature(m, fields, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 239, in _create_structure_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-12 01:12:04 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-132960142097344 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-12 01:12:04 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-132960142097344 | Analyzing structures in Structure Layer with buffer 10m
2026-01-12 01:12:04 | ERROR    | SecInterp.sec_interp.exporters.interpretation_exporters | export:77 | Thread-132960142097344 | Failed to export interpretations to /tmp/test_dynamic.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 74, in export
    return self._write_to_file(layer, output_path)
           ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 135, in _write_to_file
    result, error_msg, _new_layer_id, _new_layer_path = (
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 4, got 0)
2026-01-12 01:12:04 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-132960142097344 | Test Title: Test Message
2026-01-12 01:12:04 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-132960142097344 | Test Title: Test Message
2026-01-12 01:12:04 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-132960142097344 | Test Title: Test Message
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:171 | Thread-132960142097344 | CRITICAL_OP: finalize_polygon | points=2
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-132960142097344 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-12 01:12:04 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-132960142097344 | finalize_polygon() aborted - less than 3 points
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:171 | Thread-132960142097344 | CRITICAL_OP: finalize_polygon | points=3
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-132960142097344 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-132960142097344 | finalize_polygon() - emitting polygonFinished signal for e752e759-cb22-4e13-99e0-ef104f6ef428
2026-01-12 01:12:04 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-132960142097344 | Interpretation polygon finalized with 3 vertices, ID: e752e759-cb22-4e13-99e0-ef104f6ef428
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-132960142097344 | finalize_polygon() completed
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:171 | Thread-132960142097344 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-132960142097344 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-132960142097344 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-132960142097344 | ProfileInterpretationTool.reset() completed
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:171 | Thread-132960142097344 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-132960142097344 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-132960142097344 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-132960142097344 | ProfileInterpretationTool.reset() completed
2026-01-12 01:12:04 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-132960142097344 | Failed to create locator for layer layer1: mock error
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-132960142097344 | ProfileInterpretationTool.activate() called
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-132960142097344 | ProfileInterpretationTool activated successfully
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-132960142097344 | ProfileInterpretationTool.deactivate() called
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-132960142097344 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-132960142097344 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-132960142097344 | ProfileInterpretationTool.reset() completed
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-132960142097344 | ProfileInterpretationTool deactivated successfully
2026-01-12 01:12:04 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-132960142097344 | Persistent interpretations cleared by reset
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-132960142097344 | Setting saved to project: test_layer = id_123
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-132960142097344 | Setting saved to project: test_layer_name = RealName
2026-01-12 01:12:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-132960142097344 | reset() called, finalized=False
2026-01-12 01:12:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-132960142097344 | finalize_measurement called with 1 points
2026-01-12 01:12:04 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-132960142097344 | Cannot finalize measurement with less than 2 points
2026-01-12 01:12:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-132960142097344 | finalize_measurement called with 2 points
2026-01-12 01:12:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-132960142097344 | Setting finalized = True
2026-01-12 01:12:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-132960142097344 | finalize_measurement called with 2 points
2026-01-12 01:12:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-132960142097344 | Setting finalized = True
2026-01-12 01:12:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-132960142097344 | reset() called, finalized=False
2026-01-12 01:12:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-132960142097344 | reset() called, finalized=True
2026-01-12 01:12:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-132960142097344 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-12 01:12:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-132960142097344 | reset() called, finalized=False
2026-01-12 01:12:04 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-132960142097344 | Failed to create locator for layer layer1: mock error
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-132960142097344 | ProfileMeasureTool activated
2026-01-12 01:12:04 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-132960142097344 | reset() called, finalized=False
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-132960142097344 | ProfileMeasureTool deactivated
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-132960142097344 | create_drillhole_trace_layer called with 1 holes
2026-01-12 01:12:04 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-132960142097344 | Adding 1 drillhole trace features to layer
2026-01-12 01:12:04 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-132960142097344 | Failed to create memory layer: Fail
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-132960142097344 | create_drillhole_trace_layer called with 0 holes
2026-01-12 01:12:04 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-132960142097344 | No drillhole data provided for trace layer
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-132960142097344 | create_drillhole_trace_layer called with 1 holes
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-132960142097344 | Skipping hole H1: insufficient trace points (1)
2026-01-12 01:12:04 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-132960142097344 | Adding 0 drillhole trace features to layer
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-132960142097344 | create_drillhole_trace_layer called with 1 holes
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132960142097344 | render() called
2026-01-12 01:12:04 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-132960142097344 | No valid layers to render
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132960142097344 | render() called
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132960142097344 | render() called
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132960142097344 | render() called
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132960142097344 | render() called
2026-01-12 01:12:04 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-132960142097344 | No valid layers to render
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132960142097344 | render() called
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132960142097344 | CacheService initialized (Default TTL: 3600s)
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-132960142097344 | ProfileController initialized
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132960142097344 | CacheService initialized (Default TTL: 3600s)
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-132960142097344 | ProfileController initialized
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132960142097344 | CacheService initialized (Default TTL: 3600s)
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-132960142097344 | ProfileController initialized
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132960142097344 | CacheService initialized (Default TTL: 3600s)
2026-01-12 01:12:04 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-132960142097344 | ProfileController initialized
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_3d_exporter | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:136 | Thread-135461241650112 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:05:59 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:211 | Thread-135461241650112 | Configuration reset to defaults initiated
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135461241650112 | Config set: SecInterp/scale = 200.0
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135461241650112 | Config set: SecInterp/scale = 20000.0
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135461241650112 | CacheService initialized (Default TTL: 3600s)
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135461241650112 | CacheService initialized (Default TTL: 3600s)
2026-01-12 20:05:59 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135461241650112 | CacheService initialized (Default TTL: 3600s)
2026-01-12 20:05:59 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-135461241650112 | Projecting collars from Test Layer with buffer 50.0m
2026-01-12 20:05:59 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-135461241650112 | No collars found within buffer area.
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-135461241650112 | Projecting collars from Test Layer with buffer 50.0m
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-135461241650112 | DrillholeService.project_collars END: Found 1 collars.
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:317 | Thread-135461241650112 | ✓ Saving profile axes...
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-135461241650112 | ✓ Saving topographic profile...
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:317 | Thread-135461241650112 | ✓ Saving profile axes...
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:279 | Thread-135461241650112 | ✓ Saving interpretation data...
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:308 | Thread-135461241650112 | 3D Export features are restricted for this user.
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-135461241650112 | ✓ Saving topographic profile...
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:317 | Thread-135461241650112 | ✓ Saving profile axes...
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:279 | Thread-135461241650112 | ✓ Saving interpretation data...
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-135461241650112 | ✓ Saving 3D interpretation data...
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-135461241650112 | ✓ Saving topographic profile...
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:317 | Thread-135461241650112 | ✓ Saving profile axes...
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-135461241650112 | ✓ Saving geological profile...
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-135461241650112 | ✓ Saving structural profile...
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-135461241650112 | ✓ Saving drillhole data...
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:279 | Thread-135461241650112 | ✓ Saving interpretation data...
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-135461241650112 | ✓ Saving 3D interpretation data...
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-135461241650112 | ✓ Saving topographic profile...
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:317 | Thread-135461241650112 | ✓ Saving profile axes...
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:275 | Thread-135461241650112 | No interpretations provided for export.
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-135461241650112 | ✓ Saving drillhole data...
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-135461241650112 | ✓ Saving geological profile...
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:279 | Thread-135461241650112 | ✓ Saving interpretation data...
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-135461241650112 | ✓ Saving 3D interpretation data...
2026-01-12 20:06:00 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:306 | Thread-135461241650112 | Invalid section line layer, skipping 3D export.
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:279 | Thread-135461241650112 | ✓ Saving interpretation data...
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-135461241650112 | ✓ Saving structural profile...
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-135461241650112 | ✓ Saving topographic profile...
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-135461241650112 | Generating master profile with interval=50.00
2026-01-12 20:06:00 | WARNING  | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:308 | Thread-135461241650112 | Failed to generate master grid: Expected LineGeometry, got <MagicMock name='mock.QgsWkbTypes.geometryType()' id='135461149646800'>
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-135461241650112 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-135461241650112 | LOD Decimation: 100 -> 0 points (tol=10.00)
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-135461241650112 | LOD Decimation: 3 -> 0 points (tol=1.00)
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-135461241650112 | Running geometry operation: test
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-135461241650112 | Generated 1 drillhole traces
2026-01-12 20:06:00 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-135461241650112 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-12 20:06:00 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-135461241650112 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-135461241650112 | Generated 1 drillhole traces
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-135461241650112 | Drillhole preview skipped: No Collar ID field selected.
2026-01-12 20:06:00 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-135461241650112 | Failed to process drillhole intervals: ValueError: not enough values to unpack (expected 2, got 0)
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
2026-01-12 20:06:00 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-135461241650112 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
2026-01-12 20:06:00 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-135461241650112 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-12 20:06:00 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-135461241650112 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-12 20:06:00 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-135461241650112 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-12 20:06:00 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-135461241650112 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 103, in export
    self._write_geology_features(writer, geology_data, fields)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 122, in _write_geology_features
    feat = self._create_geology_feature(segment, fields)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 150, in _create_geology_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-12 20:06:00 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-135461241650112 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 189, in export
    self._write_structure_features(writer, structural_data, fields, line_length)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 210, in _write_structure_features
    feat = self._create_structure_feature(m, fields, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 239, in _create_structure_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-12 20:06:00 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-135461241650112 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-135461241650112 | Analyzing structures in Structure Layer with buffer 10m
2026-01-12 20:06:00 | ERROR    | SecInterp.sec_interp.exporters.interpretation_exporters | export:77 | Thread-135461241650112 | Failed to export interpretations to /tmp/test_dynamic.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 74, in export
    return self._write_to_file(layer, output_path)
           ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 135, in _write_to_file
    result, error_msg, _new_layer_id, _new_layer_path = (
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 4, got 0)
2026-01-12 20:06:00 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-135461241650112 | Test Title: Test Message
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-135461241650112 | Test Title: Test Message
2026-01-12 20:06:00 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-135461241650112 | Test Title: Test Message
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:171 | Thread-135461241650112 | CRITICAL_OP: finalize_polygon | points=2
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-135461241650112 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-12 20:06:00 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-135461241650112 | finalize_polygon() aborted - less than 3 points
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:171 | Thread-135461241650112 | CRITICAL_OP: finalize_polygon | points=3
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-135461241650112 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-135461241650112 | finalize_polygon() - emitting polygonFinished signal for 5f07b44a-2c64-4342-9fc2-4693350bafa8
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-135461241650112 | Interpretation polygon finalized with 3 vertices, ID: 5f07b44a-2c64-4342-9fc2-4693350bafa8
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-135461241650112 | finalize_polygon() completed
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:171 | Thread-135461241650112 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-135461241650112 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-135461241650112 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-135461241650112 | ProfileInterpretationTool.reset() completed
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:171 | Thread-135461241650112 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-135461241650112 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-135461241650112 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-135461241650112 | ProfileInterpretationTool.reset() completed
2026-01-12 20:06:00 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-135461241650112 | Failed to create locator for layer layer1: mock error
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-135461241650112 | ProfileInterpretationTool.activate() called
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-135461241650112 | ProfileInterpretationTool activated successfully
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-135461241650112 | ProfileInterpretationTool.deactivate() called
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-135461241650112 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-135461241650112 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-135461241650112 | ProfileInterpretationTool.reset() completed
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-135461241650112 | ProfileInterpretationTool deactivated successfully
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-135461241650112 | Persistent interpretations cleared by reset
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-135461241650112 | Setting saved to project: test_layer = id_123
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-135461241650112 | Setting saved to project: test_layer_name = RealName
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-135461241650112 | reset() called, finalized=False
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-135461241650112 | finalize_measurement called with 1 points
2026-01-12 20:06:00 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-135461241650112 | Cannot finalize measurement with less than 2 points
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-135461241650112 | finalize_measurement called with 2 points
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-135461241650112 | Setting finalized = True
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-135461241650112 | finalize_measurement called with 2 points
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-135461241650112 | Setting finalized = True
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-135461241650112 | reset() called, finalized=False
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-135461241650112 | reset() called, finalized=True
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-135461241650112 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-135461241650112 | reset() called, finalized=False
2026-01-12 20:06:00 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-135461241650112 | Failed to create locator for layer layer1: mock error
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-135461241650112 | ProfileMeasureTool activated
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-135461241650112 | reset() called, finalized=False
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-135461241650112 | ProfileMeasureTool deactivated
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-135461241650112 | create_drillhole_trace_layer called with 1 holes
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-135461241650112 | Adding 1 drillhole trace features to layer
2026-01-12 20:06:00 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-135461241650112 | Failed to create memory layer: Fail
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-135461241650112 | create_drillhole_trace_layer called with 0 holes
2026-01-12 20:06:00 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-135461241650112 | No drillhole data provided for trace layer
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-135461241650112 | create_drillhole_trace_layer called with 1 holes
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-135461241650112 | Skipping hole H1: insufficient trace points (1)
2026-01-12 20:06:00 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:375 | Thread-135461241650112 | Adding 0 drillhole trace features to layer
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-135461241650112 | create_drillhole_trace_layer called with 1 holes
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-135461241650112 | render() called
2026-01-12 20:06:00 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-135461241650112 | No valid layers to render
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-135461241650112 | render() called
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-135461241650112 | render() called
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-135461241650112 | render() called
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-135461241650112 | render() called
2026-01-12 20:06:00 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-135461241650112 | No valid layers to render
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-135461241650112 | render() called
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135461241650112 | CacheService initialized (Default TTL: 3600s)
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-135461241650112 | ProfileController initialized
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135461241650112 | CacheService initialized (Default TTL: 3600s)
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-135461241650112 | ProfileController initialized
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135461241650112 | CacheService initialized (Default TTL: 3600s)
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-135461241650112 | ProfileController initialized
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135461241650112 | CacheService initialized (Default TTL: 3600s)
2026-01-12 20:06:00 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-135461241650112 | ProfileController initialized
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:136 | Thread-138359569894336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:136 | Thread-138359569894336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:136 | Thread-138359569894336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:136 | Thread-138359569894336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:136 | Thread-138359569894336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:136 | Thread-138359569894336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:136 | Thread-138359569894336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:136 | Thread-138359569894336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:136 | Thread-138359569894336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:136 | Thread-138359569894336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:136 | Thread-138359569894336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:136 | Thread-138359569894336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:136 | Thread-138359569894336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:136 | Thread-138359569894336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:136 | Thread-138359569894336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_3d_exporter | get_logger:136 | Thread-138359569894336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:136 | Thread-138359569894336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:136 | Thread-138359569894336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:136 | Thread-138359569894336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:136 | Thread-138359569894336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:136 | Thread-138359569894336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:136 | Thread-138359569894336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:136 | Thread-138359569894336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:136 | Thread-138359569894336 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:211 | Thread-138359569894336 | Configuration reset to defaults initiated
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-138359569894336 | Config set: SecInterp/scale = 200.0
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-138359569894336 | Config set: SecInterp/scale = 20000.0
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138359569894336 | CacheService initialized (Default TTL: 3600s)
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138359569894336 | CacheService initialized (Default TTL: 3600s)
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138359569894336 | CacheService initialized (Default TTL: 3600s)
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-138359569894336 | Projecting collars from Test Layer with buffer 50.0m
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-138359569894336 | No collars found within buffer area.
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-138359569894336 | Projecting collars from Test Layer with buffer 50.0m
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-138359569894336 | DrillholeService.project_collars END: Found 1 collars.
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:317 | Thread-138359569894336 | ✓ Saving profile axes...
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-138359569894336 | ✓ Saving topographic profile...
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:317 | Thread-138359569894336 | ✓ Saving profile axes...
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:279 | Thread-138359569894336 | ✓ Saving interpretation data...
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:308 | Thread-138359569894336 | 3D Export features are restricted for this user.
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-138359569894336 | ✓ Saving topographic profile...
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:317 | Thread-138359569894336 | ✓ Saving profile axes...
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:279 | Thread-138359569894336 | ✓ Saving interpretation data...
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-138359569894336 | ✓ Saving 3D interpretation data...
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-138359569894336 | ✓ Saving topographic profile...
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:317 | Thread-138359569894336 | ✓ Saving profile axes...
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-138359569894336 | ✓ Saving geological profile...
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-138359569894336 | ✓ Saving structural profile...
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-138359569894336 | ✓ Saving drillhole data...
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:279 | Thread-138359569894336 | ✓ Saving interpretation data...
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-138359569894336 | ✓ Saving 3D interpretation data...
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-138359569894336 | ✓ Saving topographic profile...
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:317 | Thread-138359569894336 | ✓ Saving profile axes...
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:275 | Thread-138359569894336 | No interpretations provided for export.
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-138359569894336 | ✓ Saving drillhole data...
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-138359569894336 | ✓ Saving geological profile...
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:279 | Thread-138359569894336 | ✓ Saving interpretation data...
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-138359569894336 | ✓ Saving 3D interpretation data...
2026-01-12 20:06:08 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:306 | Thread-138359569894336 | Invalid section line layer, skipping 3D export.
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:279 | Thread-138359569894336 | ✓ Saving interpretation data...
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-138359569894336 | ✓ Saving structural profile...
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-138359569894336 | ✓ Saving topographic profile...
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-138359569894336 | Generating master profile with interval=50.00
2026-01-12 20:06:08 | WARNING  | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:308 | Thread-138359569894336 | Failed to generate master grid: Expected LineGeometry, got <MagicMock name='mock.QgsWkbTypes.geometryType()' id='138359482193232'>
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-138359569894336 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-138359569894336 | LOD Decimation: 100 -> 0 points (tol=10.00)
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-138359569894336 | LOD Decimation: 3 -> 0 points (tol=1.00)
2026-01-12 20:06:08 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-138359569894336 | Running geometry operation: test
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-138359569894336 | Generated 1 drillhole traces
2026-01-12 20:06:08 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-138359569894336 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-12 20:06:08 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-138359569894336 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-138359569894336 | Generated 1 drillhole traces
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-138359569894336 | Drillhole preview skipped: No Collar ID field selected.
2026-01-12 20:06:08 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-138359569894336 | Failed to process drillhole intervals: ValueError: not enough values to unpack (expected 2, got 0)
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
2026-01-12 20:06:08 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-138359569894336 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
2026-01-12 20:06:08 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-138359569894336 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-12 20:06:08 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-138359569894336 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-12 20:06:08 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-138359569894336 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-12 20:06:08 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-138359569894336 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 103, in export
    self._write_geology_features(writer, geology_data, fields)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 122, in _write_geology_features
    feat = self._create_geology_feature(segment, fields)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 150, in _create_geology_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-12 20:06:08 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-138359569894336 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 189, in export
    self._write_structure_features(writer, structural_data, fields, line_length)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 210, in _write_structure_features
    feat = self._create_structure_feature(m, fields, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 239, in _create_structure_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-12 20:06:08 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-138359569894336 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-12 20:06:08 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-138359569894336 | Analyzing structures in Structure Layer with buffer 10m
2026-01-12 20:15:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:136 | Thread-138525546773440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:15:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:136 | Thread-138525546773440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:15:16 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:136 | Thread-138525546773440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:15:16 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:136 | Thread-138525546773440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:15:16 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:136 | Thread-138525546773440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:15:16 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:136 | Thread-138525546773440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:15:16 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:136 | Thread-138525546773440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:15:16 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:136 | Thread-138525546773440 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:15:16 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-138525546773440 | Projecting collars from Test Layer with buffer 50.0m
2026-01-12 20:15:16 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-138525546773440 | No collars found within buffer area.
2026-01-12 20:15:16 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-138525546773440 | Projecting collars from Test Layer with buffer 50.0m
2026-01-12 20:15:16 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-138525546773440 | DrillholeService.project_collars END: Found 1 collars.
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_3d_exporter | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:136 | Thread-123226724289472 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-123226724289472 | create_drillhole_trace_layer called with 1 holes
2026-01-12 20:16:11 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-123226724289472 | Adding 1 drillhole trace features to layer
2026-01-12 20:16:11 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-123226724289472 | Failed to create memory layer: Fail
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-123226724289472 | create_drillhole_trace_layer called with 0 holes
2026-01-12 20:16:11 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-123226724289472 | No drillhole data provided for trace layer
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-123226724289472 | create_drillhole_trace_layer called with 1 holes
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-123226724289472 | Skipping hole H1: insufficient trace points (1)
2026-01-12 20:16:11 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-123226724289472 | Adding 0 drillhole trace features to layer
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-123226724289472 | create_drillhole_trace_layer called with 1 holes
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123226724289472 | render() called
2026-01-12 20:16:11 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-123226724289472 | No valid layers to render
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123226724289472 | render() called
2026-01-12 20:16:11 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-123226724289472 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123226724289472 | render() called
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123226724289472 | render() called
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123226724289472 | render() called
2026-01-12 20:16:11 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-123226724289472 | No valid layers to render
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123226724289472 | render() called
2026-01-12 20:16:11 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123226724289472 | render() called
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_3d_exporter | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:136 | Thread-139577542564800 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139577542564800 | create_drillhole_trace_layer called with 1 holes
2026-01-12 20:16:36 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-139577542564800 | Adding 1 drillhole trace features to layer
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139577542564800 | create_drillhole_trace_layer called with 1 holes
2026-01-12 20:16:36 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-139577542564800 | Adding 1 drillhole trace features to layer
2026-01-12 20:16:36 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-139577542564800 | Failed to create memory layer: Fail
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139577542564800 | create_drillhole_trace_layer called with 0 holes
2026-01-12 20:16:36 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-139577542564800 | No drillhole data provided for trace layer
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139577542564800 | create_drillhole_trace_layer called with 1 holes
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-139577542564800 | Skipping hole H1: insufficient trace points (1)
2026-01-12 20:16:36 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-139577542564800 | Adding 0 drillhole trace features to layer
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139577542564800 | create_drillhole_trace_layer called with 1 holes
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139577542564800 | render() called
2026-01-12 20:16:36 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-139577542564800 | No valid layers to render
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139577542564800 | render() called
2026-01-12 20:16:36 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-139577542564800 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139577542564800 | render() called
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139577542564800 | render() called
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139577542564800 | render() called
2026-01-12 20:16:36 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-139577542564800 | No valid layers to render
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139577542564800 | render() called
2026-01-12 20:16:36 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139577542564800 | render() called
2026-01-13 20:08:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:22 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:22 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:22 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:22 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:22 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:22 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:22 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:22 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:22 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:22 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:22 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:22 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:22 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_3d_exporter | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:22 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:22 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:22 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:22 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:22 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:22 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:22 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:22 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.utils | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_export | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.tasks.geology_task | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_preview | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_signals | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.ui.pages.drillhole_page | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.preview_axes_manager | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.preview_legend_renderer | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.core.controller | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.sec_interp_plugin | get_logger:136 | Thread-134334809430976 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:211 | Thread-134334809430976 | Configuration reset to defaults initiated
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-134334809430976 | Config set: SecInterp/scale = 200.0
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-134334809430976 | Config set: SecInterp/scale = 20000.0
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-134334809430976 | CacheService initialized (Default TTL: 3600s)
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-134334809430976 | CacheService initialized (Default TTL: 3600s)
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-134334809430976 | CacheService initialized (Default TTL: 3600s)
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-134334809430976 | Projecting collars from Test Layer with buffer 50.0m
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-134334809430976 | No collars found within buffer area.
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-134334809430976 | Projecting collars from Test Layer with buffer 50.0m
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-134334809430976 | DrillholeService.project_collars END: Found 1 collars.
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-134334809430976 | ✓ Saving profile axes...
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-134334809430976 | ✓ Saving topographic profile...
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-134334809430976 | ✓ Saving profile axes...
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-134334809430976 | ✓ Saving interpretation data...
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-134334809430976 | 3D Export features are restricted for this user.
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-134334809430976 | ✓ Saving topographic profile...
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-134334809430976 | ✓ Saving profile axes...
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-134334809430976 | ✓ Saving interpretation data...
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-134334809430976 | ✓ Saving 3D interpretation data...
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-134334809430976 | ✓ Saving topographic profile...
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-134334809430976 | ✓ Saving profile axes...
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-134334809430976 | ✓ Saving geological profile...
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-134334809430976 | ✓ Saving structural profile...
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-134334809430976 | ✓ Saving drillhole data...
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-134334809430976 | ✓ Saving interpretation data...
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-134334809430976 | ✓ Saving 3D interpretation data...
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-134334809430976 | ✓ Saving topographic profile...
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-134334809430976 | ✓ Saving profile axes...
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-134334809430976 | No interpretations provided for export.
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-134334809430976 | ✓ Saving drillhole data...
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-134334809430976 | ✓ Saving geological profile...
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-134334809430976 | ✓ Saving interpretation data...
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-134334809430976 | ✓ Saving 3D interpretation data...
2026-01-13 20:08:23 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-134334809430976 | Invalid section line layer, skipping 3D export.
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-134334809430976 | ✓ Saving interpretation data...
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-134334809430976 | ✓ Saving structural profile...
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-134334809430976 | ✓ Saving topographic profile...
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-134334809430976 | Generating master profile with interval=50.00
2026-01-13 20:08:23 | WARNING  | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:308 | Thread-134334809430976 | Failed to generate master grid: Expected LineGeometry, got <MagicMock name='mock.QgsWkbTypes.geometryType()' id='134334717992912'>
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-134334809430976 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-134334809430976 | LOD Decimation: 100 -> 0 points (tol=10.00)
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-134334809430976 | LOD Decimation: 3 -> 0 points (tol=1.00)
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-134334809430976 | Running geometry operation: test
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-134334809430976 | Generated 1 drillhole traces
2026-01-13 20:08:23 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-134334809430976 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-13 20:08:23 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-134334809430976 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-134334809430976 | Generated 1 drillhole traces
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-134334809430976 | Drillhole preview skipped: No Collar ID field selected.
2026-01-13 20:08:23 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-134334809430976 | Failed to process drillhole intervals: ValueError: not enough values to unpack (expected 2, got 0)
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
2026-01-13 20:08:23 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-134334809430976 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
2026-01-13 20:08:23 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-134334809430976 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-13 20:08:23 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-134334809430976 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-13 20:08:23 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-134334809430976 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-13 20:08:23 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-134334809430976 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 103, in export
    self._write_geology_features(writer, geology_data, fields)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 122, in _write_geology_features
    feat = self._create_geology_feature(segment, fields)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 150, in _create_geology_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-13 20:08:23 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-134334809430976 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 189, in export
    self._write_structure_features(writer, structural_data, fields, line_length)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 210, in _write_structure_features
    feat = self._create_structure_feature(m, fields, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 239, in _create_structure_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-13 20:08:23 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-134334809430976 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-134334809430976 | Analyzing structures in Structure Layer with buffer 10m
2026-01-13 20:08:23 | ERROR    | SecInterp.sec_interp.exporters.interpretation_exporters | export:77 | Thread-134334809430976 | Failed to export interpretations to /tmp/test_dynamic.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 74, in export
    return self._write_to_file(layer, output_path)
           ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 135, in _write_to_file
    result, error_msg, _new_layer_id, _new_layer_path = (
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 4, got 0)
2026-01-13 20:08:23 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-134334809430976 | Test Title: Test Message
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-134334809430976 | Test Title: Test Message
2026-01-13 20:08:23 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-134334809430976 | Test Title: Test Message
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:171 | Thread-134334809430976 | CRITICAL_OP: finalize_polygon | points=2
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-134334809430976 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-13 20:08:23 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-134334809430976 | finalize_polygon() aborted - less than 3 points
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:171 | Thread-134334809430976 | CRITICAL_OP: finalize_polygon | points=3
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-134334809430976 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-134334809430976 | finalize_polygon() - emitting polygonFinished signal for 0cb7700b-ee0d-410c-852e-f677d6be2b75
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-134334809430976 | Interpretation polygon finalized with 3 vertices, ID: 0cb7700b-ee0d-410c-852e-f677d6be2b75
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-134334809430976 | finalize_polygon() completed
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:171 | Thread-134334809430976 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-134334809430976 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-134334809430976 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-134334809430976 | ProfileInterpretationTool.reset() completed
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:171 | Thread-134334809430976 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-134334809430976 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-134334809430976 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-134334809430976 | ProfileInterpretationTool.reset() completed
2026-01-13 20:08:23 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-134334809430976 | Failed to create locator for layer layer1: mock error
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-134334809430976 | ProfileInterpretationTool.activate() called
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-134334809430976 | ProfileInterpretationTool activated successfully
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-134334809430976 | ProfileInterpretationTool.deactivate() called
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-134334809430976 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-134334809430976 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-134334809430976 | ProfileInterpretationTool.reset() completed
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-134334809430976 | ProfileInterpretationTool deactivated successfully
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-134334809430976 | Persistent interpretations cleared by reset
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-134334809430976 | Setting saved to project: test_layer = id_123
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-134334809430976 | Setting saved to project: test_layer_name = RealName
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-134334809430976 | reset() called, finalized=False
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-134334809430976 | finalize_measurement called with 1 points
2026-01-13 20:08:23 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-134334809430976 | Cannot finalize measurement with less than 2 points
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-134334809430976 | finalize_measurement called with 2 points
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-134334809430976 | Setting finalized = True
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-134334809430976 | finalize_measurement called with 2 points
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-134334809430976 | Setting finalized = True
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-134334809430976 | reset() called, finalized=False
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-134334809430976 | reset() called, finalized=True
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-134334809430976 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-134334809430976 | reset() called, finalized=False
2026-01-13 20:08:23 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-134334809430976 | Failed to create locator for layer layer1: mock error
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-134334809430976 | ProfileMeasureTool activated
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-134334809430976 | reset() called, finalized=False
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-134334809430976 | ProfileMeasureTool deactivated
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-134334809430976 | create_drillhole_trace_layer called with 1 holes
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-134334809430976 | Adding 1 drillhole trace features to layer
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-134334809430976 | create_drillhole_trace_layer called with 1 holes
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-134334809430976 | Adding 1 drillhole trace features to layer
2026-01-13 20:08:23 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-134334809430976 | Failed to create memory layer: Fail
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-134334809430976 | create_drillhole_trace_layer called with 0 holes
2026-01-13 20:08:23 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-134334809430976 | No drillhole data provided for trace layer
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-134334809430976 | create_drillhole_trace_layer called with 1 holes
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-134334809430976 | Skipping hole H1: insufficient trace points (1)
2026-01-13 20:08:23 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-134334809430976 | Adding 0 drillhole trace features to layer
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-134334809430976 | create_drillhole_trace_layer called with 1 holes
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134334809430976 | render() called
2026-01-13 20:08:23 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-134334809430976 | No valid layers to render
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134334809430976 | render() called
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134334809430976 | render() called
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134334809430976 | render() called
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134334809430976 | render() called
2026-01-13 20:08:23 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-134334809430976 | No valid layers to render
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134334809430976 | render() called
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-134334809430976 | CacheService initialized (Default TTL: 3600s)
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-134334809430976 | ProfileController initialized
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-134334809430976 | CacheService initialized (Default TTL: 3600s)
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-134334809430976 | ProfileController initialized
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-134334809430976 | CacheService initialized (Default TTL: 3600s)
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-134334809430976 | ProfileController initialized
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-134334809430976 | CacheService initialized (Default TTL: 3600s)
2026-01-13 20:08:23 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-134334809430976 | ProfileController initialized
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | get_logger:136 | Thread-123999632501696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | get_logger:136 | Thread-123999632501696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.core.performance_metrics | get_logger:136 | Thread-123999632501696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.core.utils.sampling | get_logger:136 | Thread-123999632501696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.core.config | get_logger:136 | Thread-123999632501696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.core.data_cache | get_logger:136 | Thread-123999632501696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.core.services.drillhole_service | get_logger:136 | Thread-123999632501696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | get_logger:136 | Thread-123999632501696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.core.services.profile_service | get_logger:136 | Thread-123999632501696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.core.services.structure_service | get_logger:136 | Thread-123999632501696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.core.services.access_control_service | get_logger:136 | Thread-123999632501696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.core.services.export_service | get_logger:136 | Thread-123999632501696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | get_logger:136 | Thread-123999632501696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.core.services.preview_service | get_logger:136 | Thread-123999632501696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.exporters.csv_exporter | get_logger:136 | Thread-123999632501696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_3d_exporter | get_logger:136 | Thread-123999632501696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.exporters.drillhole_exporters | get_logger:136 | Thread-123999632501696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.exporters.image_exporter | get_logger:136 | Thread-123999632501696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_3d_exporter | get_logger:136 | Thread-123999632501696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.exporters.interpretation_exporters | get_logger:136 | Thread-123999632501696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.exporters.pdf_exporter | get_logger:136 | Thread-123999632501696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.exporters.profile_exporters | get_logger:136 | Thread-123999632501696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.exporters.shp_exporter | get_logger:136 | Thread-123999632501696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.exporters.svg_exporter | get_logger:136 | Thread-123999632501696 | File logging initialized: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:211 | Thread-123999632501696 | Configuration reset to defaults initiated
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123999632501696 | Config set: SecInterp/scale = 200.0
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123999632501696 | Config set: SecInterp/scale = 20000.0
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123999632501696 | CacheService initialized (Default TTL: 3600s)
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123999632501696 | CacheService initialized (Default TTL: 3600s)
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123999632501696 | CacheService initialized (Default TTL: 3600s)
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-123999632501696 | Projecting collars from Test Layer with buffer 50.0m
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-123999632501696 | No collars found within buffer area.
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-123999632501696 | Projecting collars from Test Layer with buffer 50.0m
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-123999632501696 | DrillholeService.project_collars END: Found 1 collars.
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-123999632501696 | ✓ Saving profile axes...
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-123999632501696 | ✓ Saving topographic profile...
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-123999632501696 | ✓ Saving profile axes...
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-123999632501696 | ✓ Saving interpretation data...
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-123999632501696 | 3D Export features are restricted for this user.
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-123999632501696 | ✓ Saving topographic profile...
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-123999632501696 | ✓ Saving profile axes...
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-123999632501696 | ✓ Saving interpretation data...
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-123999632501696 | ✓ Saving 3D interpretation data...
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-123999632501696 | ✓ Saving topographic profile...
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-123999632501696 | ✓ Saving profile axes...
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-123999632501696 | ✓ Saving geological profile...
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-123999632501696 | ✓ Saving structural profile...
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-123999632501696 | ✓ Saving drillhole data...
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-123999632501696 | ✓ Saving interpretation data...
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-123999632501696 | ✓ Saving 3D interpretation data...
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-123999632501696 | ✓ Saving topographic profile...
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-123999632501696 | ✓ Saving profile axes...
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-123999632501696 | No interpretations provided for export.
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-123999632501696 | ✓ Saving drillhole data...
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-123999632501696 | ✓ Saving geological profile...
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-123999632501696 | ✓ Saving interpretation data...
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-123999632501696 | ✓ Saving 3D interpretation data...
2026-01-13 20:08:45 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-123999632501696 | Invalid section line layer, skipping 3D export.
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-123999632501696 | ✓ Saving interpretation data...
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-123999632501696 | ✓ Saving structural profile...
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-123999632501696 | ✓ Saving topographic profile...
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-123999632501696 | Generating master profile with interval=50.00
2026-01-13 20:08:45 | WARNING  | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:308 | Thread-123999632501696 | Failed to generate master grid: Expected LineGeometry, got <MagicMock name='mock.QgsWkbTypes.geometryType()' id='123999546332496'>
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-123999632501696 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-123999632501696 | LOD Decimation: 100 -> 0 points (tol=10.00)
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-123999632501696 | LOD Decimation: 3 -> 0 points (tol=1.00)
2026-01-13 20:08:45 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-123999632501696 | Running geometry operation: test
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-123999632501696 | Generated 1 drillhole traces
2026-01-13 20:08:45 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-123999632501696 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-13 20:08:45 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-123999632501696 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-123999632501696 | Generated 1 drillhole traces
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-123999632501696 | Drillhole preview skipped: No Collar ID field selected.
2026-01-13 20:08:45 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-123999632501696 | Failed to process drillhole intervals: ValueError: not enough values to unpack (expected 2, got 0)
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
2026-01-13 20:08:45 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-123999632501696 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
2026-01-13 20:08:45 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-123999632501696 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-13 20:08:45 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-123999632501696 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-13 20:08:45 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-123999632501696 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-13 20:08:45 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-123999632501696 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 103, in export
    self._write_geology_features(writer, geology_data, fields)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 122, in _write_geology_features
    feat = self._create_geology_feature(segment, fields)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 150, in _create_geology_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-13 20:08:45 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-123999632501696 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 189, in export
    self._write_structure_features(writer, structural_data, fields, line_length)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 210, in _write_structure_features
    feat = self._create_structure_feature(m, fields, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 239, in _create_structure_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-13 20:08:45 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-123999632501696 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-13 20:08:45 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-123999632501696 | Analyzing structures in Structure Layer with buffer 10m
2026-01-13 20:23:23 | DEBUG    | SecInterp | setup_logging:144 | Thread-128457632676800 | Logging system initialized. Root Level: 10
2026-01-13 20:23:23 | DEBUG    | SecInterp | setup_logging:145 | Thread-128457632676800 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:211 | Thread-128457632676800 | Configuration reset to defaults initiated
2026-01-13 20:23:23 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128457632676800 | Config set: SecInterp/scale = 200.0
2026-01-13 20:23:23 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128457632676800 | Config set: SecInterp/scale = 20000.0
2026-01-13 20:23:23 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128457632676800 | CacheService initialized (Default TTL: 3600s)
2026-01-13 20:23:23 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128457632676800 | CacheService initialized (Default TTL: 3600s)
2026-01-13 20:23:23 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128457632676800 | CacheService initialized (Default TTL: 3600s)
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-128457632676800 | Projecting collars from Test Layer with buffer 50.0m
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:96 | Thread-128457632676800 | No collars found within buffer area.
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-128457632676800 | Projecting collars from Test Layer with buffer 50.0m
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:117 | Thread-128457632676800 | DrillholeService.project_collars END: Found 1 collars.
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-128457632676800 | ✓ Saving profile axes...
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-128457632676800 | ✓ Saving topographic profile...
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-128457632676800 | ✓ Saving profile axes...
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-128457632676800 | ✓ Saving interpretation data...
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:324 | Thread-128457632676800 | 3D Export features are restricted for this user.
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-128457632676800 | ✓ Saving topographic profile...
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-128457632676800 | ✓ Saving profile axes...
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-128457632676800 | ✓ Saving interpretation data...
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:307 | Thread-128457632676800 | ✓ Saving 3D interpretation data...
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-128457632676800 | ✓ Saving topographic profile...
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-128457632676800 | ✓ Saving profile axes...
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:150 | Thread-128457632676800 | ✓ Saving geological profile...
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:178 | Thread-128457632676800 | ✓ Saving structural profile...
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:221 | Thread-128457632676800 | ✓ Saving drillhole data...
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-128457632676800 | ✓ Saving interpretation data...
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:307 | Thread-128457632676800 | ✓ Saving 3D interpretation data...
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-128457632676800 | ✓ Saving topographic profile...
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-128457632676800 | ✓ Saving profile axes...
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-128457632676800 | No interpretations provided for export.
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:221 | Thread-128457632676800 | ✓ Saving drillhole data...
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:150 | Thread-128457632676800 | ✓ Saving geological profile...
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-128457632676800 | ✓ Saving interpretation data...
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:307 | Thread-128457632676800 | ✓ Saving 3D interpretation data...
2026-01-13 20:23:23 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:322 | Thread-128457632676800 | Invalid section line layer, skipping 3D export.
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-128457632676800 | ✓ Saving interpretation data...
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:178 | Thread-128457632676800 | ✓ Saving structural profile...
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-128457632676800 | ✓ Saving topographic profile...
2026-01-13 20:23:23 | INFO     | SecInterp.performance | measure_operation:244 | Thread-128457632676800 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0004, 'memory_mb': 0.0, 'memory_peak_mb': 0.02, 'timestamp': '2026-01-13 20:23:23', 'args_count': 5, 'kwargs_keys': []}
2026-01-13 20:23:23 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:304 | Thread-128457632676800 | Generating master profile with interval=50.00
2026-01-13 20:23:23 | WARNING  | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:310 | Thread-128457632676800 | Failed to generate master grid: Expected LineGeometry, got <MagicMock name='mock.QgsWkbTypes.geometryType()' id='128457546151792'>
2026-01-13 20:23:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-128457632676800 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-13 20:23:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-128457632676800 | LOD Decimation: 100 -> 0 points (tol=10.00)
2026-01-13 20:23:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-128457632676800 | LOD Decimation: 3 -> 0 points (tol=1.00)
2026-01-13 20:23:23 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-128457632676800 | Running geometry operation: test
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:260 | Thread-128457632676800 | Generated 1 drillhole traces
2026-01-13 20:23:23 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:252 | Thread-128457632676800 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 234, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-13 20:23:23 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:257 | Thread-128457632676800 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 234, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 234, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:260 | Thread-128457632676800 | Generated 1 drillhole traces
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:173 | Thread-128457632676800 | Drillhole preview skipped: No Collar ID field selected.
2026-01-13 20:23:23 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:252 | Thread-128457632676800 | Failed to process drillhole intervals: ValueError: not enough values to unpack (expected 2, got 0)
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 234, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
2026-01-13 20:23:23 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:257 | Thread-128457632676800 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 234, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 234, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
2026-01-13 20:23:23 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-128457632676800 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-13 20:23:23 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:196 | Thread-128457632676800 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 191, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-13 20:23:23 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:321 | Thread-128457632676800 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 314, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 191, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-13 20:23:23 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-128457632676800 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 103, in export
    self._write_geology_features(writer, geology_data, fields)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 124, in _write_geology_features
    feat = self._create_geology_feature(segment, fields)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 154, in _create_geology_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-13 20:23:23 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:196 | Thread-128457632676800 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 193, in export
    self._write_structure_features(writer, structural_data, fields, line_length)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 214, in _write_structure_features
    feat = self._create_structure_feature(m, fields, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 243, in _create_structure_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-13 20:23:23 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:156 | Thread-128457632676800 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 154, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-13 20:23:23 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-128457632676800 | Analyzing structures in Structure Layer with buffer 10m
2026-01-15 12:59:07 | DEBUG    | SecInterp | setup_logging:142 | Thread-125354549169088 | Logging system initialized. Root Level: 10
2026-01-15 12:59:07 | DEBUG    | SecInterp | setup_logging:143 | Thread-125354549169088 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:211 | Thread-125354549169088 | Configuration reset to defaults initiated
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125354549169088 | Config set: SecInterp/scale = 200.0
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125354549169088 | Config set: SecInterp/scale = 20000.0
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125354549169088 | CacheService initialized (Default TTL: 3600s)
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125354549169088 | CacheService initialized (Default TTL: 3600s)
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125354549169088 | CacheService initialized (Default TTL: 3600s)
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-125354549169088 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-125354549169088 | No collars found within buffer area.
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-125354549169088 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-125354549169088 | DrillholeService.project_collars END: Found 1 collars.
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-125354549169088 | ✓ Saving profile axes...
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-125354549169088 | ✓ Saving topographic profile...
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-125354549169088 | ✓ Saving profile axes...
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-125354549169088 | ✓ Saving interpretation data...
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-125354549169088 | 3D Export features are restricted for this user.
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-125354549169088 | ✓ Saving topographic profile...
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-125354549169088 | ✓ Saving profile axes...
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-125354549169088 | ✓ Saving interpretation data...
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-125354549169088 | ✓ Saving 3D interpretation data...
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-125354549169088 | ✓ Saving topographic profile...
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-125354549169088 | ✓ Saving profile axes...
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-125354549169088 | ✓ Saving geological profile...
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-125354549169088 | ✓ Saving structural profile...
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-125354549169088 | ✓ Saving drillhole data...
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-125354549169088 | ✓ Saving interpretation data...
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-125354549169088 | ✓ Saving 3D interpretation data...
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-125354549169088 | ✓ Saving topographic profile...
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-125354549169088 | ✓ Saving profile axes...
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-125354549169088 | No interpretations provided for export.
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-125354549169088 | ✓ Saving drillhole data...
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-125354549169088 | ✓ Saving geological profile...
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-125354549169088 | ✓ Saving interpretation data...
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-125354549169088 | ✓ Saving 3D interpretation data...
2026-01-15 12:59:07 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-125354549169088 | Invalid section line layer, skipping 3D export.
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-125354549169088 | ✓ Saving interpretation data...
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-125354549169088 | ✓ Saving structural profile...
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-125354549169088 | ✓ Saving topographic profile...
2026-01-15 12:59:07 | INFO     | SecInterp.performance | measure_operation:244 | Thread-125354549169088 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0004, 'memory_mb': 0.0, 'memory_peak_mb': 0.02, 'timestamp': '2026-01-15 12:59:07', 'args_count': 5, 'kwargs_keys': []}
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-125354549169088 | Generating master profile with interval=50.00
2026-01-15 12:59:07 | WARNING  | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:308 | Thread-125354549169088 | Failed to generate master grid: Expected LineGeometry, got <MagicMock name='mock.QgsWkbTypes.geometryType()' id='125354458392496'>
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-125354549169088 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-125354549169088 | LOD Decimation: 100 -> 0 points (tol=10.00)
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-125354549169088 | LOD Decimation: 3 -> 0 points (tol=1.00)
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-125354549169088 | Running geometry operation: test
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-125354549169088 | Generated 1 drillhole traces
2026-01-15 12:59:07 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-125354549169088 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 12:59:07 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-125354549169088 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-125354549169088 | Generated 1 drillhole traces
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-125354549169088 | Drillhole preview skipped: No Collar ID field selected.
2026-01-15 12:59:07 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-125354549169088 | Failed to process drillhole intervals: ValueError: not enough values to unpack (expected 2, got 0)
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
2026-01-15 12:59:07 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-125354549169088 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
2026-01-15 12:59:07 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-125354549169088 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 12:59:07 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-125354549169088 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 12:59:07 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-125354549169088 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 12:59:07 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-125354549169088 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 103, in export
    self._write_geology_features(writer, geology_data, fields)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 122, in _write_geology_features
    feat = self._create_geology_feature(segment, fields)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 150, in _create_geology_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-15 12:59:07 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-125354549169088 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 189, in export
    self._write_structure_features(writer, structural_data, fields, line_length)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 210, in _write_structure_features
    feat = self._create_structure_feature(m, fields, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 239, in _create_structure_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-15 12:59:07 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-125354549169088 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-125354549169088 | Analyzing structures in Structure Layer with buffer 10m
2026-01-15 12:59:07 | ERROR    | SecInterp.sec_interp.exporters.interpretation_exporters | export:77 | Thread-125354549169088 | Failed to export interpretations to /tmp/test_dynamic.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 74, in export
    return self._write_to_file(layer, output_path)
           ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 135, in _write_to_file
    result, error_msg, _new_layer_id, _new_layer_path = (
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 4, got 0)
2026-01-15 12:59:07 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-125354549169088 | Test Title: Test Message
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-125354549169088 | Test Title: Test Message
2026-01-15 12:59:07 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-125354549169088 | Test Title: Test Message
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-125354549169088 | CRITICAL_OP: finalize_polygon | points=2
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-125354549169088 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-15 12:59:07 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-125354549169088 | finalize_polygon() aborted - less than 3 points
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-125354549169088 | CRITICAL_OP: finalize_polygon | points=3
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-125354549169088 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-125354549169088 | finalize_polygon() - emitting polygonFinished signal for 36b7c08f-06c3-4755-8d0a-d6268f23139c
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-125354549169088 | Interpretation polygon finalized with 3 vertices, ID: 36b7c08f-06c3-4755-8d0a-d6268f23139c
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-125354549169088 | finalize_polygon() completed
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-125354549169088 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-125354549169088 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-125354549169088 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-125354549169088 | ProfileInterpretationTool.reset() completed
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-125354549169088 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-125354549169088 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-125354549169088 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-125354549169088 | ProfileInterpretationTool.reset() completed
2026-01-15 12:59:07 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-125354549169088 | Failed to create locator for layer layer1: mock error
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-125354549169088 | ProfileInterpretationTool.activate() called
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-125354549169088 | ProfileInterpretationTool activated successfully
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-125354549169088 | ProfileInterpretationTool.deactivate() called
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-125354549169088 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-125354549169088 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-125354549169088 | ProfileInterpretationTool.reset() completed
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-125354549169088 | ProfileInterpretationTool deactivated successfully
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-125354549169088 | Persistent interpretations cleared by reset
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-125354549169088 | Setting saved to project: test_layer = id_123
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-125354549169088 | Setting saved to project: test_layer_name = RealName
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-125354549169088 | reset() called, finalized=False
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-125354549169088 | finalize_measurement called with 1 points
2026-01-15 12:59:07 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-125354549169088 | Cannot finalize measurement with less than 2 points
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-125354549169088 | finalize_measurement called with 2 points
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-125354549169088 | Setting finalized = True
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-125354549169088 | finalize_measurement called with 2 points
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-125354549169088 | Setting finalized = True
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-125354549169088 | reset() called, finalized=False
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-125354549169088 | reset() called, finalized=True
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-125354549169088 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-125354549169088 | reset() called, finalized=False
2026-01-15 12:59:07 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-125354549169088 | Failed to create locator for layer layer1: mock error
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-125354549169088 | ProfileMeasureTool activated
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-125354549169088 | reset() called, finalized=False
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-125354549169088 | ProfileMeasureTool deactivated
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-125354549169088 | create_drillhole_trace_layer called with 1 holes
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-125354549169088 | Adding 1 drillhole trace features to layer
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-125354549169088 | create_drillhole_trace_layer called with 1 holes
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-125354549169088 | Adding 1 drillhole trace features to layer
2026-01-15 12:59:07 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-125354549169088 | Failed to create memory layer: Fail
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-125354549169088 | create_drillhole_trace_layer called with 0 holes
2026-01-15 12:59:07 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-125354549169088 | No drillhole data provided for trace layer
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-125354549169088 | create_drillhole_trace_layer called with 1 holes
2026-01-15 12:59:07 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-125354549169088 | Skipping hole H1: insufficient trace points (1)
2026-01-15 12:59:07 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-125354549169088 | Adding 0 drillhole trace features to layer
2026-01-15 12:59:08 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-125354549169088 | create_drillhole_trace_layer called with 1 holes
2026-01-15 12:59:08 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-125354549169088 | render() called
2026-01-15 12:59:08 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-125354549169088 | No valid layers to render
2026-01-15 12:59:08 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-125354549169088 | render() called
2026-01-15 12:59:08 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-125354549169088 | render() called
2026-01-15 12:59:08 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-125354549169088 | render() called
2026-01-15 12:59:08 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-125354549169088 | render() called
2026-01-15 12:59:08 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-125354549169088 | No valid layers to render
2026-01-15 12:59:08 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-125354549169088 | render() called
2026-01-15 12:59:08 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125354549169088 | CacheService initialized (Default TTL: 3600s)
2026-01-15 12:59:08 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-125354549169088 | ProfileController initialized
2026-01-15 12:59:08 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125354549169088 | CacheService initialized (Default TTL: 3600s)
2026-01-15 12:59:08 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-125354549169088 | ProfileController initialized
2026-01-15 12:59:08 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125354549169088 | CacheService initialized (Default TTL: 3600s)
2026-01-15 12:59:08 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-125354549169088 | ProfileController initialized
2026-01-15 12:59:08 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125354549169088 | CacheService initialized (Default TTL: 3600s)
2026-01-15 12:59:08 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-125354549169088 | ProfileController initialized
2026-01-15 13:02:06 | DEBUG    | SecInterp | setup_logging:142 | Thread-128807926111168 | Logging system initialized. Root Level: 10
2026-01-15 13:02:06 | DEBUG    | SecInterp | setup_logging:143 | Thread-128807926111168 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:211 | Thread-128807926111168 | Configuration reset to defaults initiated
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128807926111168 | Config set: SecInterp/scale = 200.0
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128807926111168 | Config set: SecInterp/scale = 20000.0
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128807926111168 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128807926111168 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128807926111168 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-128807926111168 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-128807926111168 | No collars found within buffer area.
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-128807926111168 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-128807926111168 | DrillholeService.project_collars END: Found 1 collars.
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-128807926111168 | ✓ Saving profile axes...
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-128807926111168 | ✓ Saving topographic profile...
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-128807926111168 | ✓ Saving profile axes...
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-128807926111168 | ✓ Saving interpretation data...
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-128807926111168 | 3D Export features are restricted for this user.
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-128807926111168 | ✓ Saving topographic profile...
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-128807926111168 | ✓ Saving profile axes...
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-128807926111168 | ✓ Saving interpretation data...
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-128807926111168 | ✓ Saving 3D interpretation data...
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-128807926111168 | ✓ Saving topographic profile...
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-128807926111168 | ✓ Saving profile axes...
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-128807926111168 | ✓ Saving geological profile...
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-128807926111168 | ✓ Saving structural profile...
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-128807926111168 | ✓ Saving drillhole data...
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-128807926111168 | ✓ Saving interpretation data...
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-128807926111168 | ✓ Saving 3D interpretation data...
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-128807926111168 | ✓ Saving topographic profile...
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-128807926111168 | ✓ Saving profile axes...
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-128807926111168 | No interpretations provided for export.
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-128807926111168 | ✓ Saving drillhole data...
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-128807926111168 | ✓ Saving geological profile...
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-128807926111168 | ✓ Saving interpretation data...
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-128807926111168 | ✓ Saving 3D interpretation data...
2026-01-15 13:02:06 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-128807926111168 | Invalid section line layer, skipping 3D export.
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-128807926111168 | ✓ Saving interpretation data...
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-128807926111168 | ✓ Saving structural profile...
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-128807926111168 | ✓ Saving topographic profile...
2026-01-15 13:02:06 | INFO     | SecInterp.performance | measure_operation:244 | Thread-128807926111168 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0004, 'memory_mb': 0.0, 'memory_peak_mb': 0.02, 'timestamp': '2026-01-15 13:02:06', 'args_count': 5, 'kwargs_keys': []}
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-128807926111168 | Generating master profile with interval=50.00
2026-01-15 13:02:06 | WARNING  | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:308 | Thread-128807926111168 | Failed to generate master grid: Expected LineGeometry, got <MagicMock name='mock.QgsWkbTypes.geometryType()' id='128807835428784'>
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-128807926111168 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-128807926111168 | LOD Decimation: 100 -> 0 points (tol=10.00)
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-128807926111168 | LOD Decimation: 3 -> 0 points (tol=1.00)
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-128807926111168 | Running geometry operation: test
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-128807926111168 | Generated 1 drillhole traces
2026-01-15 13:02:06 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-128807926111168 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:02:06 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-128807926111168 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-128807926111168 | Generated 1 drillhole traces
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-128807926111168 | Drillhole preview skipped: No Collar ID field selected.
2026-01-15 13:02:06 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-128807926111168 | Failed to process drillhole intervals: ValueError: not enough values to unpack (expected 2, got 0)
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
2026-01-15 13:02:06 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-128807926111168 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
2026-01-15 13:02:06 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-128807926111168 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:02:06 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-128807926111168 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:02:06 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-128807926111168 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:02:06 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-128807926111168 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 103, in export
    self._write_geology_features(writer, geology_data, fields)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 122, in _write_geology_features
    feat = self._create_geology_feature(segment, fields)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 150, in _create_geology_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-15 13:02:06 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-128807926111168 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 189, in export
    self._write_structure_features(writer, structural_data, fields, line_length)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 210, in _write_structure_features
    feat = self._create_structure_feature(m, fields, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 239, in _create_structure_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-15 13:02:06 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-128807926111168 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-128807926111168 | Analyzing structures in Structure Layer with buffer 10m
2026-01-15 13:02:06 | ERROR    | SecInterp.sec_interp.exporters.interpretation_exporters | export:77 | Thread-128807926111168 | Failed to export interpretations to /tmp/test_dynamic.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 74, in export
    return self._write_to_file(layer, output_path)
           ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 135, in _write_to_file
    result, error_msg, _new_layer_id, _new_layer_path = (
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 4, got 0)
2026-01-15 13:02:06 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-128807926111168 | Test Title: Test Message
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-128807926111168 | Test Title: Test Message
2026-01-15 13:02:06 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-128807926111168 | Test Title: Test Message
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-128807926111168 | CRITICAL_OP: finalize_polygon | points=2
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-128807926111168 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-15 13:02:06 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-128807926111168 | finalize_polygon() aborted - less than 3 points
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-128807926111168 | CRITICAL_OP: finalize_polygon | points=3
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-128807926111168 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-128807926111168 | finalize_polygon() - emitting polygonFinished signal for 7bfa6021-6fa9-49f9-a9e4-41eda458d58a
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-128807926111168 | Interpretation polygon finalized with 3 vertices, ID: 7bfa6021-6fa9-49f9-a9e4-41eda458d58a
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-128807926111168 | finalize_polygon() completed
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-128807926111168 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-128807926111168 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-128807926111168 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-128807926111168 | ProfileInterpretationTool.reset() completed
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-128807926111168 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-128807926111168 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-128807926111168 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-128807926111168 | ProfileInterpretationTool.reset() completed
2026-01-15 13:02:06 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-128807926111168 | Failed to create locator for layer layer1: mock error
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-128807926111168 | ProfileInterpretationTool.activate() called
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-128807926111168 | ProfileInterpretationTool activated successfully
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-128807926111168 | ProfileInterpretationTool.deactivate() called
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-128807926111168 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-128807926111168 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-128807926111168 | ProfileInterpretationTool.reset() completed
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-128807926111168 | ProfileInterpretationTool deactivated successfully
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-128807926111168 | Persistent interpretations cleared by reset
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-128807926111168 | Setting saved to project: test_layer = id_123
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-128807926111168 | Setting saved to project: test_layer_name = RealName
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-128807926111168 | reset() called, finalized=False
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-128807926111168 | finalize_measurement called with 1 points
2026-01-15 13:02:06 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-128807926111168 | Cannot finalize measurement with less than 2 points
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-128807926111168 | finalize_measurement called with 2 points
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-128807926111168 | Setting finalized = True
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-128807926111168 | finalize_measurement called with 2 points
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-128807926111168 | Setting finalized = True
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-128807926111168 | reset() called, finalized=False
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-128807926111168 | reset() called, finalized=True
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-128807926111168 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-128807926111168 | reset() called, finalized=False
2026-01-15 13:02:06 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-128807926111168 | Failed to create locator for layer layer1: mock error
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-128807926111168 | ProfileMeasureTool activated
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-128807926111168 | reset() called, finalized=False
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-128807926111168 | ProfileMeasureTool deactivated
2026-01-15 13:02:06 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-128807926111168 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:02:06 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-128807926111168 | Adding 1 drillhole trace features to layer
2026-01-15 13:02:07 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-128807926111168 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:02:07 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-128807926111168 | Adding 1 drillhole trace features to layer
2026-01-15 13:02:07 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-128807926111168 | Failed to create memory layer: Fail
2026-01-15 13:02:07 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-128807926111168 | create_drillhole_trace_layer called with 0 holes
2026-01-15 13:02:07 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-128807926111168 | No drillhole data provided for trace layer
2026-01-15 13:02:07 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-128807926111168 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:02:07 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-128807926111168 | Skipping hole H1: insufficient trace points (1)
2026-01-15 13:02:07 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-128807926111168 | Adding 0 drillhole trace features to layer
2026-01-15 13:02:07 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-128807926111168 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:02:07 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128807926111168 | render() called
2026-01-15 13:02:07 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-128807926111168 | No valid layers to render
2026-01-15 13:02:07 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128807926111168 | render() called
2026-01-15 13:02:07 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128807926111168 | render() called
2026-01-15 13:02:07 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128807926111168 | render() called
2026-01-15 13:02:07 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128807926111168 | render() called
2026-01-15 13:02:07 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-128807926111168 | No valid layers to render
2026-01-15 13:02:07 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128807926111168 | render() called
2026-01-15 13:02:07 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128807926111168 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:02:07 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-128807926111168 | ProfileController initialized
2026-01-15 13:02:07 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128807926111168 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:02:07 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-128807926111168 | ProfileController initialized
2026-01-15 13:02:07 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128807926111168 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:02:07 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-128807926111168 | ProfileController initialized
2026-01-15 13:02:07 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128807926111168 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:02:07 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-128807926111168 | ProfileController initialized
2026-01-15 13:04:34 | DEBUG    | SecInterp | setup_logging:142 | Thread-133083929009088 | Logging system initialized. Root Level: 10
2026-01-15 13:04:34 | DEBUG    | SecInterp | setup_logging:143 | Thread-133083929009088 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:211 | Thread-133083929009088 | Configuration reset to defaults initiated
2026-01-15 13:04:34 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-133083929009088 | Config set: SecInterp/scale = 200.0
2026-01-15 13:04:34 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-133083929009088 | Config set: SecInterp/scale = 20000.0
2026-01-15 13:04:34 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133083929009088 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:04:34 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133083929009088 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:04:34 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133083929009088 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-133083929009088 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-133083929009088 | No collars found within buffer area.
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-133083929009088 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-133083929009088 | DrillholeService.project_collars END: Found 1 collars.
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-133083929009088 | ✓ Saving profile axes...
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-133083929009088 | ✓ Saving topographic profile...
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-133083929009088 | ✓ Saving profile axes...
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-133083929009088 | ✓ Saving interpretation data...
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-133083929009088 | 3D Export features are restricted for this user.
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-133083929009088 | ✓ Saving topographic profile...
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-133083929009088 | ✓ Saving profile axes...
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-133083929009088 | ✓ Saving interpretation data...
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-133083929009088 | ✓ Saving 3D interpretation data...
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-133083929009088 | ✓ Saving topographic profile...
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-133083929009088 | ✓ Saving profile axes...
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-133083929009088 | ✓ Saving geological profile...
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-133083929009088 | ✓ Saving structural profile...
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-133083929009088 | ✓ Saving drillhole data...
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-133083929009088 | ✓ Saving interpretation data...
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-133083929009088 | ✓ Saving 3D interpretation data...
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-133083929009088 | ✓ Saving topographic profile...
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-133083929009088 | ✓ Saving profile axes...
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-133083929009088 | No interpretations provided for export.
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-133083929009088 | ✓ Saving drillhole data...
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-133083929009088 | ✓ Saving geological profile...
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-133083929009088 | ✓ Saving interpretation data...
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-133083929009088 | ✓ Saving 3D interpretation data...
2026-01-15 13:04:34 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-133083929009088 | Invalid section line layer, skipping 3D export.
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-133083929009088 | ✓ Saving interpretation data...
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-133083929009088 | ✓ Saving structural profile...
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-133083929009088 | ✓ Saving topographic profile...
2026-01-15 13:04:34 | INFO     | SecInterp.performance | measure_operation:244 | Thread-133083929009088 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0004, 'memory_mb': 0.0, 'memory_peak_mb': 0.02, 'timestamp': '2026-01-15 13:04:34', 'args_count': 5, 'kwargs_keys': []}
2026-01-15 13:04:34 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-133083929009088 | Generating master profile with interval=50.00
2026-01-15 13:04:34 | WARNING  | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:308 | Thread-133083929009088 | Failed to generate master grid: Expected LineGeometry, got <MagicMock name='mock.QgsWkbTypes.geometryType()' id='133083838211344'>
2026-01-15 13:04:34 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-133083929009088 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-15 13:04:34 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-133083929009088 | LOD Decimation: 100 -> 0 points (tol=10.00)
2026-01-15 13:04:34 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-133083929009088 | LOD Decimation: 3 -> 0 points (tol=1.00)
2026-01-15 13:04:34 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-133083929009088 | Running geometry operation: test
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-133083929009088 | Generated 1 drillhole traces
2026-01-15 13:04:34 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-133083929009088 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:04:34 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-133083929009088 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-133083929009088 | Generated 1 drillhole traces
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-133083929009088 | Drillhole preview skipped: No Collar ID field selected.
2026-01-15 13:04:34 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-133083929009088 | Failed to process drillhole intervals: ValueError: not enough values to unpack (expected 2, got 0)
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
2026-01-15 13:04:34 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-133083929009088 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
2026-01-15 13:04:34 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-133083929009088 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:04:34 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-133083929009088 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:04:34 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-133083929009088 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:04:34 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-133083929009088 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 103, in export
    self._write_geology_features(writer, geology_data, fields)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 122, in _write_geology_features
    feat = self._create_geology_feature(segment, fields)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 150, in _create_geology_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-15 13:04:34 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-133083929009088 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 189, in export
    self._write_structure_features(writer, structural_data, fields, line_length)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 210, in _write_structure_features
    feat = self._create_structure_feature(m, fields, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 239, in _create_structure_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-15 13:04:34 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-133083929009088 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-133083929009088 | Analyzing structures in Structure Layer with buffer 10m
2026-01-15 13:04:34 | ERROR    | SecInterp.sec_interp.exporters.interpretation_exporters | export:77 | Thread-133083929009088 | Failed to export interpretations to /tmp/test_dynamic.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 74, in export
    return self._write_to_file(layer, output_path)
           ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 135, in _write_to_file
    result, error_msg, _new_layer_id, _new_layer_path = (
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 4, got 0)
2026-01-15 13:04:34 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-133083929009088 | Test Title: Test Message
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-133083929009088 | Test Title: Test Message
2026-01-15 13:04:34 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-133083929009088 | Test Title: Test Message
2026-01-15 13:04:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-133083929009088 | CRITICAL_OP: finalize_polygon | points=2
2026-01-15 13:04:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-133083929009088 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-15 13:04:34 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-133083929009088 | finalize_polygon() aborted - less than 3 points
2026-01-15 13:04:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-133083929009088 | CRITICAL_OP: finalize_polygon | points=3
2026-01-15 13:04:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-133083929009088 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-15 13:04:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-133083929009088 | finalize_polygon() - emitting polygonFinished signal for 3953abdf-e0bb-4d6c-8b54-bfd5c6ca8d4f
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-133083929009088 | Interpretation polygon finalized with 3 vertices, ID: 3953abdf-e0bb-4d6c-8b54-bfd5c6ca8d4f
2026-01-15 13:04:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-133083929009088 | finalize_polygon() completed
2026-01-15 13:04:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-133083929009088 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:04:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-133083929009088 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-15 13:04:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-133083929009088 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:04:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-133083929009088 | ProfileInterpretationTool.reset() completed
2026-01-15 13:04:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-133083929009088 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:04:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-133083929009088 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:04:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-133083929009088 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:04:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-133083929009088 | ProfileInterpretationTool.reset() completed
2026-01-15 13:04:34 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-133083929009088 | Failed to create locator for layer layer1: mock error
2026-01-15 13:04:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-133083929009088 | ProfileInterpretationTool.activate() called
2026-01-15 13:04:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-133083929009088 | ProfileInterpretationTool activated successfully
2026-01-15 13:04:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-133083929009088 | ProfileInterpretationTool.deactivate() called
2026-01-15 13:04:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-133083929009088 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:04:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-133083929009088 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:04:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-133083929009088 | ProfileInterpretationTool.reset() completed
2026-01-15 13:04:34 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-133083929009088 | ProfileInterpretationTool deactivated successfully
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-133083929009088 | Persistent interpretations cleared by reset
2026-01-15 13:04:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-133083929009088 | Setting saved to project: test_layer = id_123
2026-01-15 13:04:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-133083929009088 | Setting saved to project: test_layer_name = RealName
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-133083929009088 | reset() called, finalized=False
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133083929009088 | finalize_measurement called with 1 points
2026-01-15 13:04:34 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-133083929009088 | Cannot finalize measurement with less than 2 points
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133083929009088 | finalize_measurement called with 2 points
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-133083929009088 | Setting finalized = True
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133083929009088 | finalize_measurement called with 2 points
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-133083929009088 | Setting finalized = True
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-133083929009088 | reset() called, finalized=False
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-133083929009088 | reset() called, finalized=True
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-133083929009088 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 13:04:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-133083929009088 | reset() called, finalized=False
2026-01-15 13:04:34 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-133083929009088 | Failed to create locator for layer layer1: mock error
2026-01-15 13:04:35 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-133083929009088 | ProfileMeasureTool activated
2026-01-15 13:04:35 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-133083929009088 | reset() called, finalized=False
2026-01-15 13:04:35 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-133083929009088 | ProfileMeasureTool deactivated
2026-01-15 13:04:35 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133083929009088 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:04:35 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-133083929009088 | Adding 1 drillhole trace features to layer
2026-01-15 13:04:35 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133083929009088 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:04:35 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-133083929009088 | Adding 1 drillhole trace features to layer
2026-01-15 13:04:35 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-133083929009088 | Failed to create memory layer: Fail
2026-01-15 13:04:35 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133083929009088 | create_drillhole_trace_layer called with 0 holes
2026-01-15 13:04:35 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-133083929009088 | No drillhole data provided for trace layer
2026-01-15 13:04:35 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133083929009088 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:04:35 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-133083929009088 | Skipping hole H1: insufficient trace points (1)
2026-01-15 13:04:35 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-133083929009088 | Adding 0 drillhole trace features to layer
2026-01-15 13:04:35 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133083929009088 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:04:35 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133083929009088 | render() called
2026-01-15 13:04:35 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-133083929009088 | No valid layers to render
2026-01-15 13:04:35 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133083929009088 | render() called
2026-01-15 13:04:35 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133083929009088 | render() called
2026-01-15 13:04:35 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133083929009088 | render() called
2026-01-15 13:04:35 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133083929009088 | render() called
2026-01-15 13:04:35 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-133083929009088 | No valid layers to render
2026-01-15 13:04:35 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133083929009088 | render() called
2026-01-15 13:04:35 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133083929009088 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:04:35 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-133083929009088 | ProfileController initialized
2026-01-15 13:04:35 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133083929009088 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:04:35 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-133083929009088 | ProfileController initialized
2026-01-15 13:04:35 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133083929009088 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:04:35 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-133083929009088 | ProfileController initialized
2026-01-15 13:04:35 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133083929009088 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:04:35 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-133083929009088 | ProfileController initialized
2026-01-15 13:06:00 | DEBUG    | SecInterp | setup_logging:142 | Thread-131597330185152 | Logging system initialized. Root Level: 10
2026-01-15 13:06:00 | DEBUG    | SecInterp | setup_logging:143 | Thread-131597330185152 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:211 | Thread-131597330185152 | Configuration reset to defaults initiated
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131597330185152 | Config set: SecInterp/scale = 200.0
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131597330185152 | Config set: SecInterp/scale = 20000.0
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131597330185152 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131597330185152 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131597330185152 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-131597330185152 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-131597330185152 | No collars found within buffer area.
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-131597330185152 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-131597330185152 | DrillholeService.project_collars END: Found 1 collars.
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-131597330185152 | ✓ Saving profile axes...
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-131597330185152 | ✓ Saving topographic profile...
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-131597330185152 | ✓ Saving profile axes...
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-131597330185152 | ✓ Saving interpretation data...
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-131597330185152 | 3D Export features are restricted for this user.
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-131597330185152 | ✓ Saving topographic profile...
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-131597330185152 | ✓ Saving profile axes...
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-131597330185152 | ✓ Saving interpretation data...
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-131597330185152 | ✓ Saving 3D interpretation data...
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-131597330185152 | ✓ Saving topographic profile...
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-131597330185152 | ✓ Saving profile axes...
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-131597330185152 | ✓ Saving geological profile...
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-131597330185152 | ✓ Saving structural profile...
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-131597330185152 | ✓ Saving drillhole data...
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-131597330185152 | ✓ Saving interpretation data...
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-131597330185152 | ✓ Saving 3D interpretation data...
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-131597330185152 | ✓ Saving topographic profile...
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-131597330185152 | ✓ Saving profile axes...
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-131597330185152 | No interpretations provided for export.
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-131597330185152 | ✓ Saving drillhole data...
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-131597330185152 | ✓ Saving geological profile...
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-131597330185152 | ✓ Saving interpretation data...
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-131597330185152 | ✓ Saving 3D interpretation data...
2026-01-15 13:06:01 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-131597330185152 | Invalid section line layer, skipping 3D export.
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-131597330185152 | ✓ Saving interpretation data...
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-131597330185152 | ✓ Saving structural profile...
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-131597330185152 | ✓ Saving topographic profile...
2026-01-15 13:06:01 | INFO     | SecInterp.performance | measure_operation:244 | Thread-131597330185152 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0005, 'memory_mb': 0.0, 'memory_peak_mb': 0.02, 'timestamp': '2026-01-15 13:06:01', 'args_count': 5, 'kwargs_keys': []}
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-131597330185152 | Generating master profile with interval=50.00
2026-01-15 13:06:01 | WARNING  | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:308 | Thread-131597330185152 | Failed to generate master grid: type object 'MockQgsWkbTypes' has no attribute 'LineGeometry'
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-131597330185152 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-131597330185152 | LOD Decimation: 100 -> 0 points (tol=10.00)
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-131597330185152 | LOD Decimation: 3 -> 0 points (tol=1.00)
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-131597330185152 | Running geometry operation: test
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-131597330185152 | Generated 1 drillhole traces
2026-01-15 13:06:01 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-131597330185152 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:06:01 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-131597330185152 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-131597330185152 | Generated 1 drillhole traces
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-131597330185152 | Drillhole preview skipped: No Collar ID field selected.
2026-01-15 13:06:01 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-131597330185152 | Failed to process drillhole intervals: ValueError: not enough values to unpack (expected 2, got 0)
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
2026-01-15 13:06:01 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-131597330185152 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
2026-01-15 13:06:01 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-131597330185152 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:06:01 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-131597330185152 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:06:01 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-131597330185152 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:06:01 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-131597330185152 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 103, in export
    self._write_geology_features(writer, geology_data, fields)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 122, in _write_geology_features
    feat = self._create_geology_feature(segment, fields)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 150, in _create_geology_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-15 13:06:01 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-131597330185152 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 189, in export
    self._write_structure_features(writer, structural_data, fields, line_length)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 210, in _write_structure_features
    feat = self._create_structure_feature(m, fields, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 239, in _create_structure_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-15 13:06:01 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-131597330185152 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-131597330185152 | Analyzing structures in Structure Layer with buffer 10m
2026-01-15 13:06:01 | ERROR    | SecInterp.sec_interp.exporters.interpretation_exporters | export:77 | Thread-131597330185152 | Failed to export interpretations to /tmp/test_dynamic.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 74, in export
    return self._write_to_file(layer, output_path)
           ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 135, in _write_to_file
    result, error_msg, _new_layer_id, _new_layer_path = (
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 4, got 0)
2026-01-15 13:06:01 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-131597330185152 | Test Title: Test Message
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-131597330185152 | Test Title: Test Message
2026-01-15 13:06:01 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-131597330185152 | Test Title: Test Message
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-131597330185152 | CRITICAL_OP: finalize_polygon | points=2
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-131597330185152 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-15 13:06:01 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-131597330185152 | finalize_polygon() aborted - less than 3 points
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-131597330185152 | CRITICAL_OP: finalize_polygon | points=3
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-131597330185152 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-131597330185152 | finalize_polygon() - emitting polygonFinished signal for cdbfecdc-102d-41e2-9c38-015399c9bc28
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-131597330185152 | Interpretation polygon finalized with 3 vertices, ID: cdbfecdc-102d-41e2-9c38-015399c9bc28
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-131597330185152 | finalize_polygon() completed
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-131597330185152 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-131597330185152 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-131597330185152 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-131597330185152 | ProfileInterpretationTool.reset() completed
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-131597330185152 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-131597330185152 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-131597330185152 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-131597330185152 | ProfileInterpretationTool.reset() completed
2026-01-15 13:06:01 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-131597330185152 | Failed to create locator for layer layer1: mock error
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-131597330185152 | ProfileInterpretationTool.activate() called
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-131597330185152 | ProfileInterpretationTool activated successfully
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-131597330185152 | ProfileInterpretationTool.deactivate() called
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-131597330185152 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-131597330185152 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-131597330185152 | ProfileInterpretationTool.reset() completed
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-131597330185152 | ProfileInterpretationTool deactivated successfully
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-131597330185152 | Persistent interpretations cleared by reset
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-131597330185152 | Setting saved to project: test_layer = id_123
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-131597330185152 | Setting saved to project: test_layer_name = RealName
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-131597330185152 | reset() called, finalized=False
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-131597330185152 | finalize_measurement called with 1 points
2026-01-15 13:06:01 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-131597330185152 | Cannot finalize measurement with less than 2 points
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-131597330185152 | finalize_measurement called with 2 points
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-131597330185152 | Setting finalized = True
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-131597330185152 | finalize_measurement called with 2 points
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-131597330185152 | Setting finalized = True
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-131597330185152 | reset() called, finalized=False
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-131597330185152 | reset() called, finalized=True
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-131597330185152 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-131597330185152 | reset() called, finalized=False
2026-01-15 13:06:01 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-131597330185152 | Failed to create locator for layer layer1: mock error
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-131597330185152 | ProfileMeasureTool activated
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-131597330185152 | reset() called, finalized=False
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-131597330185152 | ProfileMeasureTool deactivated
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-131597330185152 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-131597330185152 | Adding 1 drillhole trace features to layer
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-131597330185152 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-131597330185152 | Adding 1 drillhole trace features to layer
2026-01-15 13:06:01 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-131597330185152 | Failed to create memory layer: Fail
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-131597330185152 | create_drillhole_trace_layer called with 0 holes
2026-01-15 13:06:01 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-131597330185152 | No drillhole data provided for trace layer
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-131597330185152 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-131597330185152 | Skipping hole H1: insufficient trace points (1)
2026-01-15 13:06:01 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-131597330185152 | Adding 0 drillhole trace features to layer
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-131597330185152 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131597330185152 | render() called
2026-01-15 13:06:01 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-131597330185152 | No valid layers to render
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131597330185152 | render() called
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131597330185152 | render() called
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131597330185152 | render() called
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131597330185152 | render() called
2026-01-15 13:06:01 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-131597330185152 | No valid layers to render
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131597330185152 | render() called
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131597330185152 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-131597330185152 | ProfileController initialized
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131597330185152 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-131597330185152 | ProfileController initialized
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131597330185152 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-131597330185152 | ProfileController initialized
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131597330185152 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:06:01 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-131597330185152 | ProfileController initialized
2026-01-15 13:06:29 | DEBUG    | SecInterp | setup_logging:142 | Thread-123369348332480 | Logging system initialized. Root Level: 10
2026-01-15 13:06:29 | DEBUG    | SecInterp | setup_logging:143 | Thread-123369348332480 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 13:06:29 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:211 | Thread-123369348332480 | Configuration reset to defaults initiated
2026-01-15 13:06:29 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123369348332480 | Config set: SecInterp/scale = 200.0
2026-01-15 13:06:29 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123369348332480 | Config set: SecInterp/scale = 20000.0
2026-01-15 13:06:29 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123369348332480 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:06:29 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123369348332480 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:06:29 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123369348332480 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:06:29 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-123369348332480 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:06:29 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-123369348332480 | No collars found within buffer area.
2026-01-15 13:06:29 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-123369348332480 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:06:29 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-123369348332480 | DrillholeService.project_collars END: Found 1 collars.
2026-01-15 13:06:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-123369348332480 | ✓ Saving profile axes...
2026-01-15 13:06:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-123369348332480 | ✓ Saving topographic profile...
2026-01-15 13:06:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-123369348332480 | ✓ Saving profile axes...
2026-01-15 13:06:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-123369348332480 | ✓ Saving interpretation data...
2026-01-15 13:06:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-123369348332480 | 3D Export features are restricted for this user.
2026-01-15 13:06:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-123369348332480 | ✓ Saving topographic profile...
2026-01-15 13:06:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-123369348332480 | ✓ Saving profile axes...
2026-01-15 13:06:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-123369348332480 | ✓ Saving interpretation data...
2026-01-15 13:06:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-123369348332480 | ✓ Saving 3D interpretation data...
2026-01-15 13:06:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-123369348332480 | ✓ Saving topographic profile...
2026-01-15 13:06:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-123369348332480 | ✓ Saving profile axes...
2026-01-15 13:06:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-123369348332480 | ✓ Saving geological profile...
2026-01-15 13:06:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-123369348332480 | ✓ Saving structural profile...
2026-01-15 13:06:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-123369348332480 | ✓ Saving drillhole data...
2026-01-15 13:06:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-123369348332480 | ✓ Saving interpretation data...
2026-01-15 13:06:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-123369348332480 | ✓ Saving 3D interpretation data...
2026-01-15 13:06:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-123369348332480 | ✓ Saving topographic profile...
2026-01-15 13:06:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-123369348332480 | ✓ Saving profile axes...
2026-01-15 13:06:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-123369348332480 | No interpretations provided for export.
2026-01-15 13:06:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-123369348332480 | ✓ Saving drillhole data...
2026-01-15 13:06:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-123369348332480 | ✓ Saving geological profile...
2026-01-15 13:06:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-123369348332480 | ✓ Saving interpretation data...
2026-01-15 13:06:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-123369348332480 | ✓ Saving 3D interpretation data...
2026-01-15 13:06:30 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-123369348332480 | Invalid section line layer, skipping 3D export.
2026-01-15 13:06:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-123369348332480 | ✓ Saving interpretation data...
2026-01-15 13:06:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-123369348332480 | ✓ Saving structural profile...
2026-01-15 13:06:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-123369348332480 | ✓ Saving topographic profile...
2026-01-15 13:06:30 | INFO     | SecInterp.performance | measure_operation:244 | Thread-123369348332480 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0005, 'memory_mb': 0.0, 'memory_peak_mb': 0.02, 'timestamp': '2026-01-15 13:06:30', 'args_count': 5, 'kwargs_keys': []}
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-123369348332480 | Generating master profile with interval=50.00
2026-01-15 13:06:30 | WARNING  | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:308 | Thread-123369348332480 | Failed to generate master grid: type object 'MockQgsWkbTypes' has no attribute 'LineGeometry'
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-123369348332480 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-123369348332480 | LOD Decimation: 100 -> 0 points (tol=10.00)
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-123369348332480 | LOD Decimation: 3 -> 0 points (tol=1.00)
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-123369348332480 | Running geometry operation: test
2026-01-15 13:06:30 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-123369348332480 | Generated 1 drillhole traces
2026-01-15 13:06:30 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-123369348332480 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:06:30 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-123369348332480 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:06:30 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-123369348332480 | Generated 1 drillhole traces
2026-01-15 13:06:30 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-123369348332480 | Drillhole preview skipped: No Collar ID field selected.
2026-01-15 13:06:30 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-123369348332480 | Failed to process drillhole intervals: ValueError: not enough values to unpack (expected 2, got 0)
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
2026-01-15 13:06:30 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-123369348332480 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
2026-01-15 13:06:30 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-123369348332480 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:06:30 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-123369348332480 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:06:30 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-123369348332480 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:06:30 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-123369348332480 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 103, in export
    self._write_geology_features(writer, geology_data, fields)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 122, in _write_geology_features
    feat = self._create_geology_feature(segment, fields)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 150, in _create_geology_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-15 13:06:30 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-123369348332480 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 189, in export
    self._write_structure_features(writer, structural_data, fields, line_length)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 210, in _write_structure_features
    feat = self._create_structure_feature(m, fields, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 239, in _create_structure_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-15 13:06:30 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-123369348332480 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-15 13:06:30 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-123369348332480 | Analyzing structures in Structure Layer with buffer 10m
2026-01-15 13:06:30 | ERROR    | SecInterp.sec_interp.exporters.interpretation_exporters | export:77 | Thread-123369348332480 | Failed to export interpretations to /tmp/test_dynamic.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 74, in export
    return self._write_to_file(layer, output_path)
           ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 135, in _write_to_file
    result, error_msg, _new_layer_id, _new_layer_path = (
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 4, got 0)
2026-01-15 13:06:30 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-123369348332480 | Test Title: Test Message
2026-01-15 13:06:30 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-123369348332480 | Test Title: Test Message
2026-01-15 13:06:30 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-123369348332480 | Test Title: Test Message
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-123369348332480 | CRITICAL_OP: finalize_polygon | points=2
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-123369348332480 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-15 13:06:30 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-123369348332480 | finalize_polygon() aborted - less than 3 points
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-123369348332480 | CRITICAL_OP: finalize_polygon | points=3
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-123369348332480 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-123369348332480 | finalize_polygon() - emitting polygonFinished signal for 4bba5cff-c913-45ae-a8d0-9d59b25bb80e
2026-01-15 13:06:30 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-123369348332480 | Interpretation polygon finalized with 3 vertices, ID: 4bba5cff-c913-45ae-a8d0-9d59b25bb80e
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-123369348332480 | finalize_polygon() completed
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-123369348332480 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-123369348332480 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-123369348332480 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-123369348332480 | ProfileInterpretationTool.reset() completed
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-123369348332480 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-123369348332480 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-123369348332480 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-123369348332480 | ProfileInterpretationTool.reset() completed
2026-01-15 13:06:30 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-123369348332480 | Failed to create locator for layer layer1: mock error
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-123369348332480 | ProfileInterpretationTool.activate() called
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-123369348332480 | ProfileInterpretationTool activated successfully
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-123369348332480 | ProfileInterpretationTool.deactivate() called
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-123369348332480 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-123369348332480 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-123369348332480 | ProfileInterpretationTool.reset() completed
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-123369348332480 | ProfileInterpretationTool deactivated successfully
2026-01-15 13:06:30 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-123369348332480 | Persistent interpretations cleared by reset
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-123369348332480 | Setting saved to project: test_layer = id_123
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-123369348332480 | Setting saved to project: test_layer_name = RealName
2026-01-15 13:06:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-123369348332480 | reset() called, finalized=False
2026-01-15 13:06:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-123369348332480 | finalize_measurement called with 1 points
2026-01-15 13:06:30 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-123369348332480 | Cannot finalize measurement with less than 2 points
2026-01-15 13:06:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-123369348332480 | finalize_measurement called with 2 points
2026-01-15 13:06:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-123369348332480 | Setting finalized = True
2026-01-15 13:06:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-123369348332480 | finalize_measurement called with 2 points
2026-01-15 13:06:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-123369348332480 | Setting finalized = True
2026-01-15 13:06:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-123369348332480 | reset() called, finalized=False
2026-01-15 13:06:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-123369348332480 | reset() called, finalized=True
2026-01-15 13:06:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-123369348332480 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 13:06:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-123369348332480 | reset() called, finalized=False
2026-01-15 13:06:30 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-123369348332480 | Failed to create locator for layer layer1: mock error
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-123369348332480 | ProfileMeasureTool activated
2026-01-15 13:06:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-123369348332480 | reset() called, finalized=False
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-123369348332480 | ProfileMeasureTool deactivated
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-123369348332480 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:06:30 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-123369348332480 | Adding 1 drillhole trace features to layer
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-123369348332480 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:06:30 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-123369348332480 | Adding 1 drillhole trace features to layer
2026-01-15 13:06:30 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-123369348332480 | Failed to create memory layer: Fail
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-123369348332480 | create_drillhole_trace_layer called with 0 holes
2026-01-15 13:06:30 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-123369348332480 | No drillhole data provided for trace layer
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-123369348332480 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-123369348332480 | Skipping hole H1: insufficient trace points (1)
2026-01-15 13:06:30 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-123369348332480 | Adding 0 drillhole trace features to layer
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-123369348332480 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123369348332480 | render() called
2026-01-15 13:06:30 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-123369348332480 | No valid layers to render
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123369348332480 | render() called
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123369348332480 | render() called
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123369348332480 | render() called
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123369348332480 | render() called
2026-01-15 13:06:30 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-123369348332480 | No valid layers to render
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123369348332480 | render() called
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123369348332480 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-123369348332480 | ProfileController initialized
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123369348332480 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-123369348332480 | ProfileController initialized
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123369348332480 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-123369348332480 | ProfileController initialized
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123369348332480 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:06:30 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-123369348332480 | ProfileController initialized
2026-01-15 13:06:49 | DEBUG    | SecInterp | setup_logging:142 | Thread-129186854521792 | Logging system initialized. Root Level: 10
2026-01-15 13:06:49 | DEBUG    | SecInterp | setup_logging:143 | Thread-129186854521792 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 13:07:05 | DEBUG    | SecInterp | setup_logging:142 | Thread-125594519854016 | Logging system initialized. Root Level: 10
2026-01-15 13:07:05 | DEBUG    | SecInterp | setup_logging:143 | Thread-125594519854016 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 13:07:24 | DEBUG    | SecInterp | setup_logging:142 | Thread-130088181087168 | Logging system initialized. Root Level: 10
2026-01-15 13:07:24 | DEBUG    | SecInterp | setup_logging:143 | Thread-130088181087168 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 13:07:24 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:211 | Thread-130088181087168 | Configuration reset to defaults initiated
2026-01-15 13:07:24 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130088181087168 | Config set: SecInterp/scale = 200.0
2026-01-15 13:07:24 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130088181087168 | Config set: SecInterp/scale = 20000.0
2026-01-15 13:07:24 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130088181087168 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:07:24 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130088181087168 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:07:24 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130088181087168 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:07:24 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-130088181087168 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:07:24 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-130088181087168 | No collars found within buffer area.
2026-01-15 13:07:24 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-130088181087168 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:07:24 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-130088181087168 | DrillholeService.project_collars END: Found 1 collars.
2026-01-15 13:07:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-130088181087168 | ✓ Saving profile axes...
2026-01-15 13:07:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-130088181087168 | ✓ Saving topographic profile...
2026-01-15 13:07:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-130088181087168 | ✓ Saving profile axes...
2026-01-15 13:07:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-130088181087168 | ✓ Saving interpretation data...
2026-01-15 13:07:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-130088181087168 | 3D Export features are restricted for this user.
2026-01-15 13:07:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-130088181087168 | ✓ Saving topographic profile...
2026-01-15 13:07:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-130088181087168 | ✓ Saving profile axes...
2026-01-15 13:07:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-130088181087168 | ✓ Saving interpretation data...
2026-01-15 13:07:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-130088181087168 | ✓ Saving 3D interpretation data...
2026-01-15 13:07:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-130088181087168 | ✓ Saving topographic profile...
2026-01-15 13:07:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-130088181087168 | ✓ Saving profile axes...
2026-01-15 13:07:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-130088181087168 | ✓ Saving geological profile...
2026-01-15 13:07:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-130088181087168 | ✓ Saving structural profile...
2026-01-15 13:07:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-130088181087168 | ✓ Saving drillhole data...
2026-01-15 13:07:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-130088181087168 | ✓ Saving interpretation data...
2026-01-15 13:07:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-130088181087168 | ✓ Saving 3D interpretation data...
2026-01-15 13:07:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-130088181087168 | ✓ Saving topographic profile...
2026-01-15 13:07:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-130088181087168 | ✓ Saving profile axes...
2026-01-15 13:07:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-130088181087168 | No interpretations provided for export.
2026-01-15 13:07:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-130088181087168 | ✓ Saving drillhole data...
2026-01-15 13:07:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-130088181087168 | ✓ Saving geological profile...
2026-01-15 13:07:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-130088181087168 | ✓ Saving interpretation data...
2026-01-15 13:07:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-130088181087168 | ✓ Saving 3D interpretation data...
2026-01-15 13:07:24 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-130088181087168 | Invalid section line layer, skipping 3D export.
2026-01-15 13:07:25 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-130088181087168 | ✓ Saving interpretation data...
2026-01-15 13:07:25 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-130088181087168 | ✓ Saving structural profile...
2026-01-15 13:07:25 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-130088181087168 | ✓ Saving topographic profile...
2026-01-15 13:07:25 | INFO     | SecInterp.performance | measure_operation:244 | Thread-130088181087168 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0005, 'memory_mb': 0.0, 'memory_peak_mb': 0.02, 'timestamp': '2026-01-15 13:07:25', 'args_count': 5, 'kwargs_keys': []}
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-130088181087168 | Generating master profile with interval=50.00
2026-01-15 13:07:25 | WARNING  | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:308 | Thread-130088181087168 | Failed to generate master grid: type object 'MockQgsWkbTypes' has no attribute 'LineGeometry'
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-130088181087168 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-130088181087168 | LOD Decimation: 100 -> 0 points (tol=10.00)
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-130088181087168 | LOD Decimation: 3 -> 0 points (tol=1.00)
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-130088181087168 | Running geometry operation: test
2026-01-15 13:07:25 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-130088181087168 | Generated 1 drillhole traces
2026-01-15 13:07:25 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-130088181087168 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:07:25 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-130088181087168 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:07:25 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-130088181087168 | Generated 1 drillhole traces
2026-01-15 13:07:25 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-130088181087168 | Drillhole preview skipped: No Collar ID field selected.
2026-01-15 13:07:25 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-130088181087168 | Failed to process drillhole intervals: ValueError: not enough values to unpack (expected 2, got 0)
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
2026-01-15 13:07:25 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-130088181087168 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
2026-01-15 13:07:25 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-130088181087168 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:07:25 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-130088181087168 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:07:25 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-130088181087168 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:07:25 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-130088181087168 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 103, in export
    self._write_geology_features(writer, geology_data, fields)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 122, in _write_geology_features
    feat = self._create_geology_feature(segment, fields)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 150, in _create_geology_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-15 13:07:25 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-130088181087168 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 189, in export
    self._write_structure_features(writer, structural_data, fields, line_length)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 210, in _write_structure_features
    feat = self._create_structure_feature(m, fields, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 239, in _create_structure_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-15 13:07:25 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-130088181087168 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-15 13:07:25 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-130088181087168 | Analyzing structures in Structure Layer with buffer 10m
2026-01-15 13:07:25 | ERROR    | SecInterp.sec_interp.exporters.interpretation_exporters | export:77 | Thread-130088181087168 | Failed to export interpretations to /tmp/test_dynamic.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 74, in export
    return self._write_to_file(layer, output_path)
           ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 135, in _write_to_file
    result, error_msg, _new_layer_id, _new_layer_path = (
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 4, got 0)
2026-01-15 13:07:25 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-130088181087168 | Test Title: Test Message
2026-01-15 13:07:25 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-130088181087168 | Test Title: Test Message
2026-01-15 13:07:25 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-130088181087168 | Test Title: Test Message
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-130088181087168 | CRITICAL_OP: finalize_polygon | points=2
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-130088181087168 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-15 13:07:25 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-130088181087168 | finalize_polygon() aborted - less than 3 points
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-130088181087168 | CRITICAL_OP: finalize_polygon | points=3
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-130088181087168 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-130088181087168 | finalize_polygon() - emitting polygonFinished signal for 735d79f1-f275-4f74-8431-8763e1611e3a
2026-01-15 13:07:25 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-130088181087168 | Interpretation polygon finalized with 3 vertices, ID: 735d79f1-f275-4f74-8431-8763e1611e3a
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-130088181087168 | finalize_polygon() completed
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-130088181087168 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-130088181087168 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-130088181087168 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-130088181087168 | ProfileInterpretationTool.reset() completed
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-130088181087168 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-130088181087168 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-130088181087168 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-130088181087168 | ProfileInterpretationTool.reset() completed
2026-01-15 13:07:25 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-130088181087168 | Failed to create locator for layer layer1: mock error
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-130088181087168 | ProfileInterpretationTool.activate() called
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-130088181087168 | ProfileInterpretationTool activated successfully
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-130088181087168 | ProfileInterpretationTool.deactivate() called
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-130088181087168 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-130088181087168 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-130088181087168 | ProfileInterpretationTool.reset() completed
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-130088181087168 | ProfileInterpretationTool deactivated successfully
2026-01-15 13:07:25 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-130088181087168 | Persistent interpretations cleared by reset
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-130088181087168 | Setting saved to project: test_layer = id_123
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-130088181087168 | Setting saved to project: test_layer_name = RealName
2026-01-15 13:07:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-130088181087168 | reset() called, finalized=False
2026-01-15 13:07:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-130088181087168 | finalize_measurement called with 1 points
2026-01-15 13:07:25 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-130088181087168 | Cannot finalize measurement with less than 2 points
2026-01-15 13:07:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-130088181087168 | finalize_measurement called with 2 points
2026-01-15 13:07:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-130088181087168 | Setting finalized = True
2026-01-15 13:07:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-130088181087168 | finalize_measurement called with 2 points
2026-01-15 13:07:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-130088181087168 | Setting finalized = True
2026-01-15 13:07:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-130088181087168 | reset() called, finalized=False
2026-01-15 13:07:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-130088181087168 | reset() called, finalized=True
2026-01-15 13:07:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-130088181087168 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 13:07:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-130088181087168 | reset() called, finalized=False
2026-01-15 13:07:25 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-130088181087168 | Failed to create locator for layer layer1: mock error
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-130088181087168 | ProfileMeasureTool activated
2026-01-15 13:07:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-130088181087168 | reset() called, finalized=False
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-130088181087168 | ProfileMeasureTool deactivated
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-130088181087168 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:07:25 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-130088181087168 | Adding 1 drillhole trace features to layer
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-130088181087168 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:07:25 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-130088181087168 | Adding 1 drillhole trace features to layer
2026-01-15 13:07:25 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-130088181087168 | Failed to create memory layer: Fail
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-130088181087168 | create_drillhole_trace_layer called with 0 holes
2026-01-15 13:07:25 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-130088181087168 | No drillhole data provided for trace layer
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-130088181087168 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-130088181087168 | Skipping hole H1: insufficient trace points (1)
2026-01-15 13:07:25 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-130088181087168 | Adding 0 drillhole trace features to layer
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-130088181087168 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130088181087168 | render() called
2026-01-15 13:07:25 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-130088181087168 | No valid layers to render
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130088181087168 | render() called
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130088181087168 | render() called
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130088181087168 | render() called
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130088181087168 | render() called
2026-01-15 13:07:25 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-130088181087168 | No valid layers to render
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130088181087168 | render() called
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130088181087168 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-130088181087168 | ProfileController initialized
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130088181087168 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-130088181087168 | ProfileController initialized
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130088181087168 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-130088181087168 | ProfileController initialized
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130088181087168 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:07:25 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-130088181087168 | ProfileController initialized
2026-01-15 13:09:35 | DEBUG    | SecInterp | setup_logging:142 | Thread-131330197859264 | Logging system initialized. Root Level: 10
2026-01-15 13:09:35 | DEBUG    | SecInterp | setup_logging:143 | Thread-131330197859264 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 13:09:37 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131330197859264 | Config set: SecInterp/scale = 20000.0
2026-01-15 13:10:22 | DEBUG    | SecInterp | setup_logging:142 | Thread-131021245303744 | Logging system initialized. Root Level: 10
2026-01-15 13:10:22 | DEBUG    | SecInterp | setup_logging:143 | Thread-131021245303744 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 13:10:23 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131021245303744 | Config set: SecInterp/scale = 20000.0
2026-01-15 13:12:02 | DEBUG    | SecInterp | setup_logging:142 | Thread-138105511893952 | Logging system initialized. Root Level: 10
2026-01-15 13:12:02 | DEBUG    | SecInterp | setup_logging:143 | Thread-138105511893952 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:211 | Thread-138105511893952 | Configuration reset to defaults initiated
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-138105511893952 | Config set: SecInterp/scale = 200.0
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-138105511893952 | Config set: SecInterp/scale = 20000.0
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138105511893952 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138105511893952 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138105511893952 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-138105511893952 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-138105511893952 | No collars found within buffer area.
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-138105511893952 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-138105511893952 | DrillholeService.project_collars END: Found 1 collars.
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-138105511893952 | ✓ Saving profile axes...
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-138105511893952 | ✓ Saving topographic profile...
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-138105511893952 | ✓ Saving profile axes...
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-138105511893952 | ✓ Saving interpretation data...
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-138105511893952 | 3D Export features are restricted for this user.
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-138105511893952 | ✓ Saving topographic profile...
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-138105511893952 | ✓ Saving profile axes...
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-138105511893952 | ✓ Saving interpretation data...
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-138105511893952 | ✓ Saving 3D interpretation data...
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-138105511893952 | ✓ Saving topographic profile...
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-138105511893952 | ✓ Saving profile axes...
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-138105511893952 | ✓ Saving geological profile...
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-138105511893952 | ✓ Saving structural profile...
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-138105511893952 | ✓ Saving drillhole data...
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-138105511893952 | ✓ Saving interpretation data...
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-138105511893952 | ✓ Saving 3D interpretation data...
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-138105511893952 | ✓ Saving topographic profile...
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-138105511893952 | ✓ Saving profile axes...
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-138105511893952 | No interpretations provided for export.
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-138105511893952 | ✓ Saving drillhole data...
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-138105511893952 | ✓ Saving geological profile...
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-138105511893952 | ✓ Saving interpretation data...
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-138105511893952 | ✓ Saving 3D interpretation data...
2026-01-15 13:12:02 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-138105511893952 | Invalid section line layer, skipping 3D export.
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-138105511893952 | ✓ Saving interpretation data...
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-138105511893952 | ✓ Saving structural profile...
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-138105511893952 | ✓ Saving topographic profile...
2026-01-15 13:12:02 | INFO     | SecInterp.performance | measure_operation:244 | Thread-138105511893952 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0004, 'memory_mb': 0.0, 'memory_peak_mb': 0.02, 'timestamp': '2026-01-15 13:12:02', 'args_count': 5, 'kwargs_keys': []}
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-138105511893952 | Generating master profile with interval=50.00
2026-01-15 13:12:02 | WARNING  | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:308 | Thread-138105511893952 | Failed to generate master grid: Geometry is null or invalid
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-138105511893952 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-138105511893952 | LOD Decimation: 100 -> 0 points (tol=10.00)
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-138105511893952 | LOD Decimation: 3 -> 0 points (tol=1.00)
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-138105511893952 | Running geometry operation: test
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-138105511893952 | Generated 1 drillhole traces
2026-01-15 13:12:02 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-138105511893952 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:12:02 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-138105511893952 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-138105511893952 | Generated 1 drillhole traces
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-138105511893952 | Drillhole preview skipped: No Collar ID field selected.
2026-01-15 13:12:02 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-138105511893952 | Failed to process drillhole intervals: ValueError: not enough values to unpack (expected 2, got 0)
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
2026-01-15 13:12:02 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-138105511893952 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
2026-01-15 13:12:02 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-138105511893952 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:12:02 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-138105511893952 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:12:02 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-138105511893952 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:12:02 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-138105511893952 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 103, in export
    self._write_geology_features(writer, geology_data, fields)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 122, in _write_geology_features
    feat = self._create_geology_feature(segment, fields)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 150, in _create_geology_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-15 13:12:02 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-138105511893952 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 189, in export
    self._write_structure_features(writer, structural_data, fields, line_length)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 210, in _write_structure_features
    feat = self._create_structure_feature(m, fields, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 239, in _create_structure_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-15 13:12:02 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-138105511893952 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-138105511893952 | Analyzing structures in Structure Layer with buffer 10m
2026-01-15 13:12:02 | ERROR    | SecInterp.sec_interp.exporters.interpretation_exporters | export:77 | Thread-138105511893952 | Failed to export interpretations to /tmp/test_dynamic.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 74, in export
    return self._write_to_file(layer, output_path)
           ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 135, in _write_to_file
    result, error_msg, _new_layer_id, _new_layer_path = (
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 4, got 0)
2026-01-15 13:12:02 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-138105511893952 | Test Title: Test Message
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-138105511893952 | Test Title: Test Message
2026-01-15 13:12:02 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-138105511893952 | Test Title: Test Message
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-138105511893952 | CRITICAL_OP: finalize_polygon | points=2
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-138105511893952 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-15 13:12:02 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-138105511893952 | finalize_polygon() aborted - less than 3 points
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-138105511893952 | CRITICAL_OP: finalize_polygon | points=3
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-138105511893952 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-138105511893952 | finalize_polygon() - emitting polygonFinished signal for 2c61a651-bd6e-4457-9c74-9dd6387256d5
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-138105511893952 | Interpretation polygon finalized with 3 vertices, ID: 2c61a651-bd6e-4457-9c74-9dd6387256d5
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-138105511893952 | finalize_polygon() completed
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-138105511893952 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-138105511893952 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-138105511893952 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-138105511893952 | ProfileInterpretationTool.reset() completed
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-138105511893952 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-138105511893952 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-138105511893952 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-138105511893952 | ProfileInterpretationTool.reset() completed
2026-01-15 13:12:02 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-138105511893952 | Failed to create locator for layer layer1: mock error
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-138105511893952 | ProfileInterpretationTool.activate() called
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-138105511893952 | ProfileInterpretationTool activated successfully
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-138105511893952 | ProfileInterpretationTool.deactivate() called
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-138105511893952 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-138105511893952 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-138105511893952 | ProfileInterpretationTool.reset() completed
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-138105511893952 | ProfileInterpretationTool deactivated successfully
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-138105511893952 | Persistent interpretations cleared by reset
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-138105511893952 | Setting saved to project: test_layer = id_123
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-138105511893952 | Setting saved to project: test_layer_name = RealName
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138105511893952 | reset() called, finalized=False
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-138105511893952 | finalize_measurement called with 1 points
2026-01-15 13:12:02 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-138105511893952 | Cannot finalize measurement with less than 2 points
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-138105511893952 | finalize_measurement called with 2 points
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-138105511893952 | Setting finalized = True
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-138105511893952 | finalize_measurement called with 2 points
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-138105511893952 | Setting finalized = True
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138105511893952 | reset() called, finalized=False
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138105511893952 | reset() called, finalized=True
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-138105511893952 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138105511893952 | reset() called, finalized=False
2026-01-15 13:12:02 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-138105511893952 | Failed to create locator for layer layer1: mock error
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-138105511893952 | ProfileMeasureTool activated
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138105511893952 | reset() called, finalized=False
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-138105511893952 | ProfileMeasureTool deactivated
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138105511893952 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-138105511893952 | Adding 1 drillhole trace features to layer
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138105511893952 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-138105511893952 | Adding 1 drillhole trace features to layer
2026-01-15 13:12:02 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-138105511893952 | Failed to create memory layer: Fail
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138105511893952 | create_drillhole_trace_layer called with 0 holes
2026-01-15 13:12:02 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-138105511893952 | No drillhole data provided for trace layer
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138105511893952 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-138105511893952 | Skipping hole H1: insufficient trace points (1)
2026-01-15 13:12:02 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-138105511893952 | Adding 0 drillhole trace features to layer
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138105511893952 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138105511893952 | render() called
2026-01-15 13:12:02 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-138105511893952 | No valid layers to render
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138105511893952 | render() called
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138105511893952 | render() called
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138105511893952 | render() called
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138105511893952 | render() called
2026-01-15 13:12:02 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-138105511893952 | No valid layers to render
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138105511893952 | render() called
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138105511893952 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-138105511893952 | ProfileController initialized
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138105511893952 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:12:02 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-138105511893952 | ProfileController initialized
2026-01-15 13:12:03 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138105511893952 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:12:03 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-138105511893952 | ProfileController initialized
2026-01-15 13:12:03 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138105511893952 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:12:03 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-138105511893952 | ProfileController initialized
2026-01-15 13:17:05 | DEBUG    | SecInterp | setup_logging:142 | Thread-128000894815168 | Logging system initialized. Root Level: 10
2026-01-15 13:17:05 | DEBUG    | SecInterp | setup_logging:143 | Thread-128000894815168 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 13:17:05 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:211 | Thread-128000894815168 | Configuration reset to defaults initiated
2026-01-15 13:17:05 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128000894815168 | Config set: SecInterp/scale = 200.0
2026-01-15 13:17:05 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128000894815168 | Config set: SecInterp/scale = 20000.0
2026-01-15 13:17:05 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128000894815168 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:17:05 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128000894815168 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:17:05 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128000894815168 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:17:05 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-128000894815168 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:17:05 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-128000894815168 | No collars found within buffer area.
2026-01-15 13:17:05 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-128000894815168 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:17:05 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-128000894815168 | DrillholeService.project_collars END: Found 1 collars.
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-128000894815168 | ✓ Saving profile axes...
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-128000894815168 | ✓ Saving topographic profile...
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-128000894815168 | ✓ Saving profile axes...
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-128000894815168 | ✓ Saving interpretation data...
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-128000894815168 | 3D Export features are restricted for this user.
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-128000894815168 | ✓ Saving topographic profile...
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-128000894815168 | ✓ Saving profile axes...
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-128000894815168 | ✓ Saving interpretation data...
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-128000894815168 | ✓ Saving 3D interpretation data...
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-128000894815168 | ✓ Saving topographic profile...
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-128000894815168 | ✓ Saving profile axes...
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-128000894815168 | ✓ Saving geological profile...
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-128000894815168 | ✓ Saving structural profile...
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-128000894815168 | ✓ Saving drillhole data...
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-128000894815168 | ✓ Saving interpretation data...
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-128000894815168 | ✓ Saving 3D interpretation data...
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-128000894815168 | ✓ Saving topographic profile...
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-128000894815168 | ✓ Saving profile axes...
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-128000894815168 | No interpretations provided for export.
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-128000894815168 | ✓ Saving drillhole data...
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-128000894815168 | ✓ Saving geological profile...
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-128000894815168 | ✓ Saving interpretation data...
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-128000894815168 | ✓ Saving 3D interpretation data...
2026-01-15 13:17:06 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-128000894815168 | Invalid section line layer, skipping 3D export.
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-128000894815168 | ✓ Saving interpretation data...
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-128000894815168 | ✓ Saving structural profile...
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-128000894815168 | ✓ Saving topographic profile...
2026-01-15 13:17:06 | INFO     | SecInterp.performance | measure_operation:244 | Thread-128000894815168 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0008, 'memory_mb': 0.0, 'memory_peak_mb': 0.02, 'timestamp': '2026-01-15 13:17:06', 'args_count': 5, 'kwargs_keys': []}
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-128000894815168 | Generating master profile with interval=50.00
2026-01-15 13:17:06 | WARNING  | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:308 | Thread-128000894815168 | Failed to generate master grid: type object 'MockQgsWkbTypes' has no attribute 'LineGeometry'
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-128000894815168 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-128000894815168 | LOD Decimation: 100 -> 0 points (tol=10.00)
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-128000894815168 | LOD Decimation: 3 -> 0 points (tol=1.00)
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-128000894815168 | Running geometry operation: test
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-128000894815168 | Generated 1 drillhole traces
2026-01-15 13:17:06 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-128000894815168 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:17:06 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-128000894815168 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-128000894815168 | Generated 1 drillhole traces
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-128000894815168 | Drillhole preview skipped: No Collar ID field selected.
2026-01-15 13:17:06 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-128000894815168 | Failed to process drillhole intervals: ValueError: not enough values to unpack (expected 2, got 0)
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
2026-01-15 13:17:06 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-128000894815168 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
2026-01-15 13:17:06 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-128000894815168 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:17:06 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-128000894815168 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:17:06 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-128000894815168 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:17:06 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-128000894815168 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 103, in export
    self._write_geology_features(writer, geology_data, fields)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 122, in _write_geology_features
    feat = self._create_geology_feature(segment, fields)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 150, in _create_geology_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-15 13:17:06 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-128000894815168 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 189, in export
    self._write_structure_features(writer, structural_data, fields, line_length)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 210, in _write_structure_features
    feat = self._create_structure_feature(m, fields, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 239, in _create_structure_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-15 13:17:06 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-128000894815168 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-128000894815168 | Analyzing structures in Structure Layer with buffer 10m
2026-01-15 13:17:06 | ERROR    | SecInterp.sec_interp.exporters.interpretation_exporters | export:77 | Thread-128000894815168 | Failed to export interpretations to /tmp/test_dynamic.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 74, in export
    return self._write_to_file(layer, output_path)
           ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 135, in _write_to_file
    result, error_msg, _new_layer_id, _new_layer_path = (
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 4, got 0)
2026-01-15 13:17:06 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-128000894815168 | Test Title: Test Message
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-128000894815168 | Test Title: Test Message
2026-01-15 13:17:06 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-128000894815168 | Test Title: Test Message
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-128000894815168 | CRITICAL_OP: finalize_polygon | points=2
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-128000894815168 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-15 13:17:06 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-128000894815168 | finalize_polygon() aborted - less than 3 points
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-128000894815168 | CRITICAL_OP: finalize_polygon | points=3
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-128000894815168 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-128000894815168 | finalize_polygon() - emitting polygonFinished signal for c9fd85ba-9702-494c-9e3e-46198b6e6acf
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-128000894815168 | Interpretation polygon finalized with 3 vertices, ID: c9fd85ba-9702-494c-9e3e-46198b6e6acf
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-128000894815168 | finalize_polygon() completed
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-128000894815168 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-128000894815168 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-128000894815168 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-128000894815168 | ProfileInterpretationTool.reset() completed
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-128000894815168 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-128000894815168 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-128000894815168 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-128000894815168 | ProfileInterpretationTool.reset() completed
2026-01-15 13:17:06 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-128000894815168 | Failed to create locator for layer layer1: mock error
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-128000894815168 | ProfileInterpretationTool.activate() called
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-128000894815168 | ProfileInterpretationTool activated successfully
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-128000894815168 | ProfileInterpretationTool.deactivate() called
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-128000894815168 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-128000894815168 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-128000894815168 | ProfileInterpretationTool.reset() completed
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-128000894815168 | ProfileInterpretationTool deactivated successfully
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-128000894815168 | Persistent interpretations cleared by reset
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-128000894815168 | Setting saved to project: test_layer = id_123
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-128000894815168 | Setting saved to project: test_layer_name = RealName
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-128000894815168 | reset() called, finalized=False
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-128000894815168 | finalize_measurement called with 1 points
2026-01-15 13:17:06 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-128000894815168 | Cannot finalize measurement with less than 2 points
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-128000894815168 | finalize_measurement called with 2 points
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-128000894815168 | Setting finalized = True
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-128000894815168 | finalize_measurement called with 2 points
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-128000894815168 | Setting finalized = True
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-128000894815168 | reset() called, finalized=False
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-128000894815168 | reset() called, finalized=True
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-128000894815168 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-128000894815168 | reset() called, finalized=False
2026-01-15 13:17:06 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-128000894815168 | Failed to create locator for layer layer1: mock error
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-128000894815168 | ProfileMeasureTool activated
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-128000894815168 | reset() called, finalized=False
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-128000894815168 | ProfileMeasureTool deactivated
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-128000894815168 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-128000894815168 | Adding 1 drillhole trace features to layer
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-128000894815168 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-128000894815168 | Adding 1 drillhole trace features to layer
2026-01-15 13:17:06 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-128000894815168 | Failed to create memory layer: Fail
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-128000894815168 | create_drillhole_trace_layer called with 0 holes
2026-01-15 13:17:06 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-128000894815168 | No drillhole data provided for trace layer
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-128000894815168 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-128000894815168 | Skipping hole H1: insufficient trace points (1)
2026-01-15 13:17:06 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-128000894815168 | Adding 0 drillhole trace features to layer
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-128000894815168 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128000894815168 | render() called
2026-01-15 13:17:06 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-128000894815168 | No valid layers to render
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128000894815168 | render() called
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128000894815168 | render() called
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128000894815168 | render() called
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128000894815168 | render() called
2026-01-15 13:17:06 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-128000894815168 | No valid layers to render
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128000894815168 | render() called
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128000894815168 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-128000894815168 | ProfileController initialized
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128000894815168 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-128000894815168 | ProfileController initialized
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128000894815168 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-128000894815168 | ProfileController initialized
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128000894815168 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:17:06 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-128000894815168 | ProfileController initialized
2026-01-15 13:18:04 | DEBUG    | SecInterp | setup_logging:142 | Thread-140437677042624 | Logging system initialized. Root Level: 10
2026-01-15 13:18:04 | DEBUG    | SecInterp | setup_logging:143 | Thread-140437677042624 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 13:18:32 | DEBUG    | SecInterp | setup_logging:142 | Thread-136010276682688 | Logging system initialized. Root Level: 10
2026-01-15 13:18:32 | DEBUG    | SecInterp | setup_logging:143 | Thread-136010276682688 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 13:20:17 | DEBUG    | SecInterp | setup_logging:142 | Thread-135500050607040 | Logging system initialized. Root Level: 10
2026-01-15 13:20:17 | DEBUG    | SecInterp | setup_logging:143 | Thread-135500050607040 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:211 | Thread-135500050607040 | Configuration reset to defaults initiated
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135500050607040 | Config set: SecInterp/scale = 200.0
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135500050607040 | Config set: SecInterp/scale = 20000.0
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135500050607040 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135500050607040 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135500050607040 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-135500050607040 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-135500050607040 | No collars found within buffer area.
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-135500050607040 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-135500050607040 | DrillholeService.project_collars END: Found 1 collars.
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-135500050607040 | ✓ Saving profile axes...
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-135500050607040 | ✓ Saving topographic profile...
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-135500050607040 | ✓ Saving profile axes...
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-135500050607040 | ✓ Saving interpretation data...
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-135500050607040 | 3D Export features are restricted for this user.
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-135500050607040 | ✓ Saving topographic profile...
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-135500050607040 | ✓ Saving profile axes...
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-135500050607040 | ✓ Saving interpretation data...
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-135500050607040 | ✓ Saving 3D interpretation data...
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-135500050607040 | ✓ Saving topographic profile...
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-135500050607040 | ✓ Saving profile axes...
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-135500050607040 | ✓ Saving geological profile...
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-135500050607040 | ✓ Saving structural profile...
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-135500050607040 | ✓ Saving drillhole data...
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-135500050607040 | ✓ Saving interpretation data...
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-135500050607040 | ✓ Saving 3D interpretation data...
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-135500050607040 | ✓ Saving topographic profile...
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-135500050607040 | ✓ Saving profile axes...
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-135500050607040 | No interpretations provided for export.
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-135500050607040 | ✓ Saving drillhole data...
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-135500050607040 | ✓ Saving geological profile...
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-135500050607040 | ✓ Saving interpretation data...
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-135500050607040 | ✓ Saving 3D interpretation data...
2026-01-15 13:20:17 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-135500050607040 | Invalid section line layer, skipping 3D export.
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-135500050607040 | ✓ Saving interpretation data...
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-135500050607040 | ✓ Saving structural profile...
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-135500050607040 | ✓ Saving topographic profile...
2026-01-15 13:20:17 | INFO     | SecInterp.performance | measure_operation:244 | Thread-135500050607040 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0005, 'memory_mb': 0.0, 'memory_peak_mb': 0.02, 'timestamp': '2026-01-15 13:20:17', 'args_count': 5, 'kwargs_keys': []}
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-135500050607040 | Generating master profile with interval=50.00
2026-01-15 13:20:17 | WARNING  | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:308 | Thread-135500050607040 | Failed to generate master grid: type object 'MockQgsWkbTypes' has no attribute 'LineGeometry'
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-135500050607040 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-135500050607040 | LOD Decimation: 100 -> 0 points (tol=10.00)
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-135500050607040 | LOD Decimation: 3 -> 0 points (tol=1.00)
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-135500050607040 | Running geometry operation: test
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-135500050607040 | Generated 1 drillhole traces
2026-01-15 13:20:17 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-135500050607040 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:20:17 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-135500050607040 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-135500050607040 | Generated 1 drillhole traces
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-135500050607040 | Drillhole preview skipped: No Collar ID field selected.
2026-01-15 13:20:17 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-135500050607040 | Failed to process drillhole intervals: ValueError: not enough values to unpack (expected 2, got 0)
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
2026-01-15 13:20:17 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-135500050607040 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
2026-01-15 13:20:17 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-135500050607040 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:20:17 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-135500050607040 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:20:17 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-135500050607040 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:20:17 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-135500050607040 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 103, in export
    self._write_geology_features(writer, geology_data, fields)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 122, in _write_geology_features
    feat = self._create_geology_feature(segment, fields)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 150, in _create_geology_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-15 13:20:17 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-135500050607040 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 189, in export
    self._write_structure_features(writer, structural_data, fields, line_length)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 210, in _write_structure_features
    feat = self._create_structure_feature(m, fields, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 239, in _create_structure_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-15 13:20:17 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-135500050607040 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-135500050607040 | Analyzing structures in Structure Layer with buffer 10m
2026-01-15 13:20:17 | ERROR    | SecInterp.sec_interp.exporters.interpretation_exporters | export:77 | Thread-135500050607040 | Failed to export interpretations to /tmp/test_dynamic.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 74, in export
    return self._write_to_file(layer, output_path)
           ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 135, in _write_to_file
    result, error_msg, _new_layer_id, _new_layer_path = (
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 4, got 0)
2026-01-15 13:20:17 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-135500050607040 | Test Title: Test Message
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-135500050607040 | Test Title: Test Message
2026-01-15 13:20:17 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-135500050607040 | Test Title: Test Message
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-135500050607040 | CRITICAL_OP: finalize_polygon | points=2
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-135500050607040 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-15 13:20:17 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-135500050607040 | finalize_polygon() aborted - less than 3 points
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-135500050607040 | CRITICAL_OP: finalize_polygon | points=3
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-135500050607040 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-135500050607040 | finalize_polygon() - emitting polygonFinished signal for 78502c74-7549-493a-bc48-7be04be80a94
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-135500050607040 | Interpretation polygon finalized with 3 vertices, ID: 78502c74-7549-493a-bc48-7be04be80a94
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-135500050607040 | finalize_polygon() completed
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-135500050607040 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-135500050607040 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-135500050607040 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-135500050607040 | ProfileInterpretationTool.reset() completed
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-135500050607040 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-135500050607040 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-135500050607040 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-135500050607040 | ProfileInterpretationTool.reset() completed
2026-01-15 13:20:17 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-135500050607040 | Failed to create locator for layer layer1: mock error
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-135500050607040 | ProfileInterpretationTool.activate() called
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-135500050607040 | ProfileInterpretationTool activated successfully
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-135500050607040 | ProfileInterpretationTool.deactivate() called
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-135500050607040 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-135500050607040 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-135500050607040 | ProfileInterpretationTool.reset() completed
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-135500050607040 | ProfileInterpretationTool deactivated successfully
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-135500050607040 | Persistent interpretations cleared by reset
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-135500050607040 | Setting saved to project: test_layer = id_123
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-135500050607040 | Setting saved to project: test_layer_name = RealName
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-135500050607040 | reset() called, finalized=False
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-135500050607040 | finalize_measurement called with 1 points
2026-01-15 13:20:17 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-135500050607040 | Cannot finalize measurement with less than 2 points
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-135500050607040 | finalize_measurement called with 2 points
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-135500050607040 | Setting finalized = True
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-135500050607040 | finalize_measurement called with 2 points
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-135500050607040 | Setting finalized = True
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-135500050607040 | reset() called, finalized=False
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-135500050607040 | reset() called, finalized=True
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-135500050607040 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-135500050607040 | reset() called, finalized=False
2026-01-15 13:20:17 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-135500050607040 | Failed to create locator for layer layer1: mock error
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-135500050607040 | ProfileMeasureTool activated
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-135500050607040 | reset() called, finalized=False
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-135500050607040 | ProfileMeasureTool deactivated
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-135500050607040 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-135500050607040 | Adding 1 drillhole trace features to layer
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-135500050607040 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-135500050607040 | Adding 1 drillhole trace features to layer
2026-01-15 13:20:17 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-135500050607040 | Failed to create memory layer: Fail
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-135500050607040 | create_drillhole_trace_layer called with 0 holes
2026-01-15 13:20:17 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-135500050607040 | No drillhole data provided for trace layer
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-135500050607040 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-135500050607040 | Skipping hole H1: insufficient trace points (1)
2026-01-15 13:20:17 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-135500050607040 | Adding 0 drillhole trace features to layer
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-135500050607040 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-135500050607040 | render() called
2026-01-15 13:20:17 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-135500050607040 | No valid layers to render
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-135500050607040 | render() called
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-135500050607040 | render() called
2026-01-15 13:20:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-135500050607040 | render() called
2026-01-15 13:20:18 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-135500050607040 | render() called
2026-01-15 13:20:18 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-135500050607040 | No valid layers to render
2026-01-15 13:20:18 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-135500050607040 | render() called
2026-01-15 13:20:18 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135500050607040 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:20:18 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-135500050607040 | ProfileController initialized
2026-01-15 13:20:18 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135500050607040 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:20:18 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-135500050607040 | ProfileController initialized
2026-01-15 13:20:18 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135500050607040 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:20:18 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-135500050607040 | ProfileController initialized
2026-01-15 13:20:18 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135500050607040 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:20:18 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-135500050607040 | ProfileController initialized
2026-01-15 13:21:58 | DEBUG    | SecInterp | setup_logging:142 | Thread-138467027569600 | Logging system initialized. Root Level: 10
2026-01-15 13:21:58 | DEBUG    | SecInterp | setup_logging:143 | Thread-138467027569600 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 13:21:58 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:211 | Thread-138467027569600 | Configuration reset to defaults initiated
2026-01-15 13:21:58 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-138467027569600 | Config set: SecInterp/scale = 200.0
2026-01-15 13:21:58 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-138467027569600 | Config set: SecInterp/scale = 20000.0
2026-01-15 13:21:58 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138467027569600 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:21:58 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138467027569600 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:21:58 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138467027569600 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-138467027569600 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-138467027569600 | No collars found within buffer area.
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-138467027569600 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-138467027569600 | DrillholeService.project_collars END: Found 1 collars.
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-138467027569600 | ✓ Saving profile axes...
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-138467027569600 | ✓ Saving topographic profile...
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-138467027569600 | ✓ Saving profile axes...
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-138467027569600 | ✓ Saving interpretation data...
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-138467027569600 | 3D Export features are restricted for this user.
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-138467027569600 | ✓ Saving topographic profile...
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-138467027569600 | ✓ Saving profile axes...
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-138467027569600 | ✓ Saving interpretation data...
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-138467027569600 | ✓ Saving 3D interpretation data...
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-138467027569600 | ✓ Saving topographic profile...
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-138467027569600 | ✓ Saving profile axes...
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-138467027569600 | ✓ Saving geological profile...
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-138467027569600 | ✓ Saving structural profile...
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-138467027569600 | ✓ Saving drillhole data...
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-138467027569600 | ✓ Saving interpretation data...
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-138467027569600 | ✓ Saving 3D interpretation data...
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-138467027569600 | ✓ Saving topographic profile...
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-138467027569600 | ✓ Saving profile axes...
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-138467027569600 | No interpretations provided for export.
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-138467027569600 | ✓ Saving drillhole data...
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-138467027569600 | ✓ Saving geological profile...
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-138467027569600 | ✓ Saving interpretation data...
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-138467027569600 | ✓ Saving 3D interpretation data...
2026-01-15 13:21:59 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-138467027569600 | Invalid section line layer, skipping 3D export.
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-138467027569600 | ✓ Saving interpretation data...
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-138467027569600 | ✓ Saving structural profile...
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-138467027569600 | ✓ Saving topographic profile...
2026-01-15 13:21:59 | INFO     | SecInterp.performance | measure_operation:244 | Thread-138467027569600 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0004, 'memory_mb': 0.0, 'memory_peak_mb': 0.02, 'timestamp': '2026-01-15 13:21:59', 'args_count': 5, 'kwargs_keys': []}
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-138467027569600 | Generating master profile with interval=50.00
2026-01-15 13:21:59 | WARNING  | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:308 | Thread-138467027569600 | Failed to generate master grid: type object 'MockQgsWkbTypes' has no attribute 'LineGeometry'
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-138467027569600 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-138467027569600 | LOD Decimation: 100 -> 0 points (tol=10.00)
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-138467027569600 | LOD Decimation: 3 -> 0 points (tol=1.00)
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-138467027569600 | Running geometry operation: test
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-138467027569600 | Generated 1 drillhole traces
2026-01-15 13:21:59 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-138467027569600 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:21:59 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-138467027569600 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-138467027569600 | Generated 1 drillhole traces
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-138467027569600 | Drillhole preview skipped: No Collar ID field selected.
2026-01-15 13:21:59 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-138467027569600 | Failed to process drillhole intervals: ValueError: not enough values to unpack (expected 2, got 0)
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
2026-01-15 13:21:59 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-138467027569600 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
    ^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 0)
2026-01-15 13:21:59 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-138467027569600 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:21:59 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-138467027569600 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:21:59 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-138467027569600 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:21:59 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-138467027569600 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 103, in export
    self._write_geology_features(writer, geology_data, fields)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 122, in _write_geology_features
    feat = self._create_geology_feature(segment, fields)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 150, in _create_geology_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-15 13:21:59 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-138467027569600 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 189, in export
    self._write_structure_features(writer, structural_data, fields, line_length)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 210, in _write_structure_features
    feat = self._create_structure_feature(m, fields, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 239, in _create_structure_feature
    if idx >= 0:
       ^^^^^^^^
TypeError: '>=' not supported between instances of 'MagicMock' and 'int'
2026-01-15 13:21:59 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-138467027569600 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-138467027569600 | Analyzing structures in Structure Layer with buffer 10m
2026-01-15 13:21:59 | ERROR    | SecInterp.sec_interp.exporters.interpretation_exporters | export:77 | Thread-138467027569600 | Failed to export interpretations to /tmp/test_dynamic.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 74, in export
    return self._write_to_file(layer, output_path)
           ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 135, in _write_to_file
    result, error_msg, _new_layer_id, _new_layer_path = (
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 4, got 0)
2026-01-15 13:21:59 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-138467027569600 | Test Title: Test Message
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-138467027569600 | Test Title: Test Message
2026-01-15 13:21:59 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-138467027569600 | Test Title: Test Message
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-138467027569600 | CRITICAL_OP: finalize_polygon | points=2
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-138467027569600 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-15 13:21:59 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-138467027569600 | finalize_polygon() aborted - less than 3 points
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-138467027569600 | CRITICAL_OP: finalize_polygon | points=3
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-138467027569600 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-138467027569600 | finalize_polygon() - emitting polygonFinished signal for 20ca8137-c7c0-4f28-bff5-78d71d72b52a
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-138467027569600 | Interpretation polygon finalized with 3 vertices, ID: 20ca8137-c7c0-4f28-bff5-78d71d72b52a
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-138467027569600 | finalize_polygon() completed
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-138467027569600 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-138467027569600 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-138467027569600 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-138467027569600 | ProfileInterpretationTool.reset() completed
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-138467027569600 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-138467027569600 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-138467027569600 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-138467027569600 | ProfileInterpretationTool.reset() completed
2026-01-15 13:21:59 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-138467027569600 | Failed to create locator for layer layer1: mock error
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-138467027569600 | ProfileInterpretationTool.activate() called
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-138467027569600 | ProfileInterpretationTool activated successfully
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-138467027569600 | ProfileInterpretationTool.deactivate() called
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-138467027569600 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-138467027569600 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-138467027569600 | ProfileInterpretationTool.reset() completed
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-138467027569600 | ProfileInterpretationTool deactivated successfully
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-138467027569600 | Persistent interpretations cleared by reset
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-138467027569600 | Setting saved to project: test_layer = id_123
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-138467027569600 | Setting saved to project: test_layer_name = RealName
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138467027569600 | reset() called, finalized=False
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-138467027569600 | finalize_measurement called with 1 points
2026-01-15 13:21:59 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-138467027569600 | Cannot finalize measurement with less than 2 points
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-138467027569600 | finalize_measurement called with 2 points
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-138467027569600 | Setting finalized = True
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-138467027569600 | finalize_measurement called with 2 points
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-138467027569600 | Setting finalized = True
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138467027569600 | reset() called, finalized=False
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138467027569600 | reset() called, finalized=True
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-138467027569600 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138467027569600 | reset() called, finalized=False
2026-01-15 13:21:59 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-138467027569600 | Failed to create locator for layer layer1: mock error
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-138467027569600 | ProfileMeasureTool activated
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138467027569600 | reset() called, finalized=False
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-138467027569600 | ProfileMeasureTool deactivated
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138467027569600 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-138467027569600 | Adding 1 drillhole trace features to layer
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138467027569600 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-138467027569600 | Adding 1 drillhole trace features to layer
2026-01-15 13:21:59 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-138467027569600 | Failed to create memory layer: Fail
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138467027569600 | create_drillhole_trace_layer called with 0 holes
2026-01-15 13:21:59 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-138467027569600 | No drillhole data provided for trace layer
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138467027569600 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-138467027569600 | Skipping hole H1: insufficient trace points (1)
2026-01-15 13:21:59 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-138467027569600 | Adding 0 drillhole trace features to layer
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138467027569600 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138467027569600 | render() called
2026-01-15 13:21:59 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-138467027569600 | No valid layers to render
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138467027569600 | render() called
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138467027569600 | render() called
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138467027569600 | render() called
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138467027569600 | render() called
2026-01-15 13:21:59 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-138467027569600 | No valid layers to render
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138467027569600 | render() called
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138467027569600 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-138467027569600 | ProfileController initialized
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138467027569600 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-138467027569600 | ProfileController initialized
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138467027569600 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-138467027569600 | ProfileController initialized
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138467027569600 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:21:59 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-138467027569600 | ProfileController initialized
2026-01-15 13:24:37 | DEBUG    | SecInterp | setup_logging:142 | Thread-125606896237504 | Logging system initialized. Root Level: 10
2026-01-15 13:24:37 | DEBUG    | SecInterp | setup_logging:143 | Thread-125606896237504 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:211 | Thread-125606896237504 | Configuration reset to defaults initiated
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125606896237504 | Config set: SecInterp/scale = 200.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125606896237504 | Config set: SecInterp/scale = 20000.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125606896237504 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125606896237504 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125606896237504 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-125606896237504 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-125606896237504 | No collars found within buffer area.
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-125606896237504 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-125606896237504 | DrillholeService.project_collars END: Found 1 collars.
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-125606896237504 | ✓ Saving profile axes...
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-125606896237504 | ✓ Saving topographic profile...
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-125606896237504 | ✓ Saving profile axes...
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-125606896237504 | ✓ Saving interpretation data...
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-125606896237504 | 3D Export features are restricted for this user.
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-125606896237504 | ✓ Saving topographic profile...
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-125606896237504 | ✓ Saving profile axes...
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-125606896237504 | ✓ Saving interpretation data...
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-125606896237504 | ✓ Saving 3D interpretation data...
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-125606896237504 | ✓ Saving topographic profile...
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-125606896237504 | ✓ Saving profile axes...
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-125606896237504 | ✓ Saving geological profile...
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-125606896237504 | ✓ Saving structural profile...
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-125606896237504 | ✓ Saving drillhole data...
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-125606896237504 | ✓ Saving interpretation data...
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-125606896237504 | Access denied for restricted feature: 3D Export
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-125606896237504 | 3D Export features are restricted for this user.
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-125606896237504 | ✓ Saving topographic profile...
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-125606896237504 | ✓ Saving profile axes...
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-125606896237504 | No interpretations provided for export.
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-125606896237504 | ✓ Saving drillhole data...
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-125606896237504 | ✓ Saving geological profile...
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-125606896237504 | ✓ Saving interpretation data...
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-125606896237504 | ✓ Saving 3D interpretation data...
2026-01-15 13:24:38 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-125606896237504 | Invalid section line layer, skipping 3D export.
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-125606896237504 | ✓ Saving interpretation data...
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-125606896237504 | ✓ Saving structural profile...
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-125606896237504 | ✓ Saving topographic profile...
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-125606896237504 | Generating master profile with interval=10.00
2026-01-15 13:24:38 | WARNING  | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:308 | Thread-125606896237504 | Failed to generate master grid: type object 'MockQgsWkbTypes' has no attribute 'LineGeometry'
2026-01-15 13:24:38 | INFO     | SecInterp.performance | measure_operation:244 | Thread-125606896237504 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0025, 'memory_mb': 0.0, 'memory_peak_mb': 0.01, 'timestamp': '2026-01-15 13:24:38', 'args_count': 5, 'kwargs_keys': []}
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-125606896237504 | Generating master profile with interval=50.00
2026-01-15 13:24:38 | WARNING  | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:308 | Thread-125606896237504 | Failed to generate master grid: type object 'MockQgsWkbTypes' has no attribute 'LineGeometry'
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-125606896237504 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-125606896237504 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-125606896237504 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-125606896237504 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-125606896237504 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-125606896237504 | Running geometry operation: test
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-125606896237504 | Generated 1 drillhole traces
2026-01-15 13:24:38 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-125606896237504 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:24:38 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-125606896237504 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-125606896237504 | Generated 1 drillhole traces
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-125606896237504 | Drillhole preview skipped: No Collar ID field selected.
2026-01-15 13:24:38 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-125606896237504 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:24:38 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-125606896237504 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:24:38 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-125606896237504 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:24:38 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-125606896237504 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:24:38 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-125606896237504 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-125606896237504 | Analyzing structures in Structure Layer with buffer 10m
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-125606896237504 | Processed 1 structural measurements from Structure Layer
2026-01-15 13:24:38 | ERROR    | SecInterp.sec_interp.exporters.drillhole_3d_exporter | export:141 | Thread-125606896237504 | Failed to export 3D drillhole intervals to /tmp/tmpb780s3uk/intervals_3d_proj.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/drillhole_3d_exporter.py", line 127, in export
    geom = QgsGeometry.fromPolyline(points)
           ^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: type object 'MockQgsGeometry' has no attribute 'fromPolyline'. Did you mean: 'fromPolylineXY'?
2026-01-15 13:24:38 | ERROR    | SecInterp.sec_interp.exporters.drillhole_3d_exporter | export:141 | Thread-125606896237504 | Failed to export 3D drillhole intervals to /tmp/tmpr1_8a0cc/intervals_3d_real.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/drillhole_3d_exporter.py", line 127, in export
    geom = QgsGeometry.fromPolyline(points)
           ^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: type object 'MockQgsGeometry' has no attribute 'fromPolyline'. Did you mean: 'fromPolylineXY'?
2026-01-15 13:24:38 | ERROR    | SecInterp.sec_interp.exporters.drillhole_3d_exporter | export:73 | Thread-125606896237504 | Failed to export 3D drillhole traces to /tmp/tmpgsw7za8f/traces_3d_proj.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/drillhole_3d_exporter.py", line 63, in export
    geom = QgsGeometry.fromPolyline(points)
           ^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: type object 'MockQgsGeometry' has no attribute 'fromPolyline'. Did you mean: 'fromPolylineXY'?
2026-01-15 13:24:38 | ERROR    | SecInterp.sec_interp.exporters.drillhole_3d_exporter | export:73 | Thread-125606896237504 | Failed to export 3D drillhole traces to /tmp/tmp8ddk6o8c/traces_3d_real.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/drillhole_3d_exporter.py", line 63, in export
    geom = QgsGeometry.fromPolyline(points)
           ^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: type object 'MockQgsGeometry' has no attribute 'fromPolyline'. Did you mean: 'fromPolylineXY'?
2026-01-15 13:24:38 | ERROR    | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:148 | Thread-125606896237504 | Failed to export interpretations: Success
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-125606896237504 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-125606896237504 | Generated QML style: /tmp/test.qml
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-125606896237504 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-125606896237504 | Generated QML style: dummy.qml
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-125606896237504 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-125606896237504 | Generated QML style: dummy.qml
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-125606896237504 | Loaded 0 interpretations from project
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:369 | Thread-125606896237504 | Inherited attributes from geology: GeologyUnit
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-125606896237504 | Loaded 0 interpretations from project
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: section_layer = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: section_layer_name = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-125606896237504 | Failed to restore layer for section_layer
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: buffer_dist = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dem_layer = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dem_layer_name = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-125606896237504 | Failed to restore layer for dem_layer
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dem_band = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: scale = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: geol_layer = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: geol_layer_name = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-125606896237504 | Failed to restore layer for geol_layer
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: geol_field = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: struct_layer = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: struct_layer_name = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-125606896237504 | Failed to restore layer for struct_layer
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: struct_dip_field = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: struct_strike_field = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dh_collar_layer = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-125606896237504 | Failed to restore layer for dh_collar_layer
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dh_collar_id = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dh_use_geom = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dh_collar_x = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dh_collar_y = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dh_collar_z = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dh_collar_depth = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dh_survey_layer = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-125606896237504 | Failed to restore layer for dh_survey_layer
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dh_survey_id = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dh_survey_depth = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dh_survey_azim = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dh_survey_incl = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dh_interval_layer = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-125606896237504 | Failed to restore layer for dh_interval_layer
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dh_interval_id = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dh_interval_from = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dh_interval_to = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dh_interval_lith = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: last_output_dir = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: interp_custom_fields = 1.0
2026-01-15 13:24:38 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-125606896237504 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: show_topo = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: show_geol = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: show_struct = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: show_drillholes = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: show_interpretations = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: auto_lod = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: adaptive_sampling = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: max_points = 1.0
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-125606896237504 | Settings loaded successfully from Project/Global config
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:477 | Thread-125606896237504 | Cache cleared by user
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-125606896237504 | GeologyGenerationTask started (Background Thread)
2026-01-15 13:24:38 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-125606896237504 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-125606896237504 | GeologyGenerationTask started (Background Thread)
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-125606896237504 | GeologyGenerationTask finished with 1 segments
2026-01-15 13:24:38 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-125606896237504 | Test Title: Test Message
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-125606896237504 | Test Title: Test Message
2026-01-15 13:24:38 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-125606896237504 | Test Title: Test Message
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-125606896237504 | CRITICAL_OP: finalize_polygon | points=2
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-125606896237504 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-15 13:24:38 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-125606896237504 | finalize_polygon() aborted - less than 3 points
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-125606896237504 | CRITICAL_OP: finalize_polygon | points=3
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-125606896237504 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-125606896237504 | finalize_polygon() - emitting polygonFinished signal for 4eb6e988-fed5-48a1-bdee-309ce857d056
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-125606896237504 | Interpretation polygon finalized with 3 vertices, ID: 4eb6e988-fed5-48a1-bdee-309ce857d056
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-125606896237504 | finalize_polygon() completed
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-125606896237504 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-125606896237504 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-125606896237504 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-125606896237504 | ProfileInterpretationTool.reset() completed
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-125606896237504 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-125606896237504 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-125606896237504 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-125606896237504 | ProfileInterpretationTool.reset() completed
2026-01-15 13:24:38 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-125606896237504 | Failed to create locator for layer layer1: mock error
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-125606896237504 | ProfileInterpretationTool.activate() called
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-125606896237504 | ProfileInterpretationTool activated successfully
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-125606896237504 | ProfileInterpretationTool.deactivate() called
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-125606896237504 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-125606896237504 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-125606896237504 | ProfileInterpretationTool.reset() completed
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-125606896237504 | ProfileInterpretationTool deactivated successfully
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: buffer_dist = 100.5
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-125606896237504 | Persistent interpretations cleared by reset
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-125606896237504 | Setting saved to project: test_layer = id_123
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-125606896237504 | Setting saved to project: test_layer_name = RealName
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: test_layer = 1.0
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-125606896237504 | Project setting hit: test_layer_name = RealName
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-125606896237504 | Restoring layer: test_layer -> RealName
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-125606896237504 | reset() called, finalized=False
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-125606896237504 | finalize_measurement called with 1 points
2026-01-15 13:24:38 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-125606896237504 | Cannot finalize measurement with less than 2 points
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-125606896237504 | finalize_measurement called with 2 points
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-125606896237504 | Setting finalized = True
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-125606896237504 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-125606896237504 | Switching to pan tool to stop measurement
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-125606896237504 | Pan tool activated - measurement should be frozen
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-125606896237504 | Ignoring click - measurement is finalized
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-125606896237504 | finalize_measurement called with 2 points
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-125606896237504 | Setting finalized = True
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-125606896237504 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-125606896237504 | Switching to pan tool to stop measurement
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-125606896237504 | Pan tool activated - measurement should be frozen
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-125606896237504 | reset() called, finalized=False
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-125606896237504 | reset() called, finalized=False
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-125606896237504 | reset() called, finalized=True
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-125606896237504 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-125606896237504 | reset() called, finalized=False
2026-01-15 13:24:38 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-125606896237504 | Failed to create locator for layer layer1: mock error
2026-01-15 13:24:38 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-125606896237504 | Failed to create locator for layer l2: fail
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-125606896237504 | ProfileMeasureTool activated
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-125606896237504 | reset() called, finalized=False
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-125606896237504 | ProfileMeasureTool deactivated
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-125606896237504 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-125606896237504 | Adding 1 drillhole trace features to layer
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-125606896237504 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:24:38 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-125606896237504 | Adding 1 drillhole trace features to layer
2026-01-15 13:24:38 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-125606896237504 | Failed to create memory layer: Fail
2026-01-15 13:24:38 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-125606896237504 | create_drillhole_trace_layer called with 0 holes
2026-01-15 13:24:39 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-125606896237504 | No drillhole data provided for trace layer
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-125606896237504 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-125606896237504 | Skipping hole H1: insufficient trace points (1)
2026-01-15 13:24:39 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-125606896237504 | Adding 0 drillhole trace features to layer
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-125606896237504 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-125606896237504 | render() called
2026-01-15 13:24:39 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-125606896237504 | No valid layers to render
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-125606896237504 | render() called
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-125606896237504 | render() called
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-125606896237504 | render() called
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-125606896237504 | render() called
2026-01-15 13:24:39 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-125606896237504 | No valid layers to render
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-125606896237504 | render() called
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-125606896237504 | render() called
2026-01-15 13:24:39 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-125606896237504 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-15 13:24:39 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-125606896237504 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125606896237504 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-125606896237504 | ProfileController initialized
2026-01-15 13:24:39 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-125606896237504 | Loaded 0 interpretations from project
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dem_band = 1
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: scale = 50000.0
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dh_use_geom = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: show_topo = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: show_geol = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: show_struct = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: show_drillholes = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: show_interpretations = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: auto_lod = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: max_points = 10000
2026-01-15 13:24:39 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-125606896237504 | Settings loaded successfully from Project/Global config
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-125606896237504 | Saved 1 interpretations to project
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125606896237504 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-125606896237504 | ProfileController initialized
2026-01-15 13:24:39 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-125606896237504 | Loaded 0 interpretations from project
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dem_band = 1
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: scale = 50000.0
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dh_use_geom = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: show_topo = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: show_geol = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: show_struct = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: show_drillholes = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: show_interpretations = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: auto_lod = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: max_points = 10000
2026-01-15 13:24:39 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-125606896237504 | Settings loaded successfully from Project/Global config
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-125606896237504 | Saved 1 interpretations to project
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-125606896237504 | Saved 0 interpretations to project
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125606896237504 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-125606896237504 | ProfileController initialized
2026-01-15 13:24:39 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-125606896237504 | Loaded 0 interpretations from project
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dem_band = 1
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: scale = 50000.0
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dh_use_geom = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: show_topo = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: show_geol = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: show_struct = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: show_drillholes = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: show_interpretations = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: auto_lod = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: max_points = 10000
2026-01-15 13:24:39 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-125606896237504 | Settings loaded successfully from Project/Global config
2026-01-15 13:24:39 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-125606896237504 | Loaded 1 interpretations from project
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125606896237504 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-125606896237504 | ProfileController initialized
2026-01-15 13:24:39 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-125606896237504 | Loaded 1 interpretations from project
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dem_band = 1
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: scale = 50000.0
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: dh_use_geom = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: show_topo = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: show_geol = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: show_struct = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: show_drillholes = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: show_interpretations = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: auto_lod = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:24:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-125606896237504 | Global setting fallback: max_points = 10000
2026-01-15 13:24:39 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-125606896237504 | Settings loaded successfully from Project/Global config
2026-01-15 13:29:24 | DEBUG    | SecInterp | setup_logging:142 | Thread-126095477255104 | Logging system initialized. Root Level: 10
2026-01-15 13:29:24 | DEBUG    | SecInterp | setup_logging:143 | Thread-126095477255104 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:211 | Thread-126095477255104 | Configuration reset to defaults initiated
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126095477255104 | Config set: SecInterp/scale = 200.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126095477255104 | Config set: SecInterp/scale = 20000.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126095477255104 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126095477255104 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126095477255104 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-126095477255104 | ✓ Saving profile axes...
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-126095477255104 | ✓ Saving topographic profile...
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-126095477255104 | ✓ Saving profile axes...
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-126095477255104 | ✓ Saving interpretation data...
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-126095477255104 | 3D Export features are restricted for this user.
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-126095477255104 | ✓ Saving topographic profile...
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-126095477255104 | ✓ Saving profile axes...
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-126095477255104 | ✓ Saving interpretation data...
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-126095477255104 | ✓ Saving 3D interpretation data...
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-126095477255104 | ✓ Saving topographic profile...
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-126095477255104 | ✓ Saving profile axes...
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-126095477255104 | ✓ Saving geological profile...
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-126095477255104 | ✓ Saving structural profile...
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-126095477255104 | ✓ Saving drillhole data...
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-126095477255104 | ✓ Saving interpretation data...
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-126095477255104 | Access denied for restricted feature: 3D Export
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-126095477255104 | 3D Export features are restricted for this user.
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-126095477255104 | ✓ Saving topographic profile...
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-126095477255104 | ✓ Saving profile axes...
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-126095477255104 | No interpretations provided for export.
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-126095477255104 | ✓ Saving drillhole data...
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-126095477255104 | ✓ Saving geological profile...
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-126095477255104 | ✓ Saving interpretation data...
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-126095477255104 | ✓ Saving 3D interpretation data...
2026-01-15 13:29:24 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-126095477255104 | Invalid section line layer, skipping 3D export.
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-126095477255104 | ✓ Saving interpretation data...
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-126095477255104 | ✓ Saving structural profile...
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-126095477255104 | ✓ Saving topographic profile...
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-126095477255104 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-15 13:29:24 | WARNING  | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:70 | Thread-126095477255104 | LOD decimation failed: type object 'MockQgsGeometry' has no attribute 'fromPolylineXY'
2026-01-15 13:29:24 | WARNING  | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:70 | Thread-126095477255104 | LOD decimation failed: type object 'MockQgsGeometry' has no attribute 'fromPolylineXY'
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-126095477255104 | Running geometry operation: test
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-126095477255104 | Generated 1 drillhole traces
2026-01-15 13:29:24 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-126095477255104 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 313, in export
    self._write_axes_features(writer, lines, axis_names)
    ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 333, in _write_axes_features
    geom = QgsGeometry.fromPolylineXY(points)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: type object 'MockQgsGeometry' has no attribute 'fromPolylineXY'. Did you mean: 'fromPolylineZ'?
2026-01-15 13:29:24 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-126095477255104 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 313, in export
    self._write_axes_features(writer, lines, axis_names)
    ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 333, in _write_axes_features
    geom = QgsGeometry.fromPolylineXY(points)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: type object 'MockQgsGeometry' has no attribute 'fromPolylineXY'. Did you mean: 'fromPolylineZ'?
2026-01-15 13:29:24 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-126095477255104 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 53, in export
    geom = QgsGeometry.fromPolylineXY(points)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: type object 'MockQgsGeometry' has no attribute 'fromPolylineXY'. Did you mean: 'fromPolylineZ'?
2026-01-15 13:29:24 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-126095477255104 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:29:24 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-126095477255104 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:29:24 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-126095477255104 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:29:24 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-126095477255104 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 103, in export
    self._write_geology_features(writer, geology_data, fields)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 122, in _write_geology_features
    feat = self._create_geology_feature(segment, fields)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 142, in _create_geology_feature
    geom = QgsGeometry.fromPolylineXY(points)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: type object 'MockQgsGeometry' has no attribute 'fromPolylineXY'. Did you mean: 'fromPolylineZ'?
2026-01-15 13:29:24 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-126095477255104 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 53, in export
    geom = QgsGeometry.fromPolylineXY(points)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: type object 'MockQgsGeometry' has no attribute 'fromPolylineXY'. Did you mean: 'fromPolylineZ'?
2026-01-15 13:29:24 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-126095477255104 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 189, in export
    self._write_structure_features(writer, structural_data, fields, line_length)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 210, in _write_structure_features
    feat = self._create_structure_feature(m, fields, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 231, in _create_structure_feature
    geom = self._calculate_dip_geometry(m, line_length)
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 257, in _calculate_dip_geometry
    return QgsGeometry.fromPolylineXY([p1, p2])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: type object 'MockQgsGeometry' has no attribute 'fromPolylineXY'. Did you mean: 'fromPolylineZ'?
2026-01-15 13:29:24 | ERROR    | SecInterp.sec_interp.exporters.drillhole_3d_exporter | export:141 | Thread-126095477255104 | Failed to export 3D drillhole intervals to /tmp/tmpgx3m2fj1/intervals_3d_proj.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/drillhole_3d_exporter.py", line 127, in export
    geom = QgsGeometry.fromPolyline(points)
           ^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: type object 'MockQgsGeometry' has no attribute 'fromPolyline'. Did you mean: 'fromPolylineZ'?
2026-01-15 13:29:24 | ERROR    | SecInterp.sec_interp.exporters.drillhole_3d_exporter | export:141 | Thread-126095477255104 | Failed to export 3D drillhole intervals to /tmp/tmpgiyiu33t/intervals_3d_real.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/drillhole_3d_exporter.py", line 127, in export
    geom = QgsGeometry.fromPolyline(points)
           ^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: type object 'MockQgsGeometry' has no attribute 'fromPolyline'. Did you mean: 'fromPolylineZ'?
2026-01-15 13:29:24 | ERROR    | SecInterp.sec_interp.exporters.drillhole_3d_exporter | export:73 | Thread-126095477255104 | Failed to export 3D drillhole traces to /tmp/tmpsvtyz9ec/traces_3d_proj.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/drillhole_3d_exporter.py", line 63, in export
    geom = QgsGeometry.fromPolyline(points)
           ^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: type object 'MockQgsGeometry' has no attribute 'fromPolyline'. Did you mean: 'fromPolylineZ'?
2026-01-15 13:29:24 | ERROR    | SecInterp.sec_interp.exporters.drillhole_3d_exporter | export:73 | Thread-126095477255104 | Failed to export 3D drillhole traces to /tmp/tmp9elujvty/traces_3d_real.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/drillhole_3d_exporter.py", line 63, in export
    geom = QgsGeometry.fromPolyline(points)
           ^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: type object 'MockQgsGeometry' has no attribute 'fromPolyline'. Did you mean: 'fromPolylineZ'?
2026-01-15 13:29:24 | ERROR    | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:148 | Thread-126095477255104 | Failed to export interpretations: Success
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-126095477255104 | Loaded 0 interpretations from project
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:369 | Thread-126095477255104 | Inherited attributes from geology: GeologyUnit
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-126095477255104 | Loaded 0 interpretations from project
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: section_layer = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: section_layer_name = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-126095477255104 | Failed to restore layer for section_layer
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: buffer_dist = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dem_layer = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dem_layer_name = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-126095477255104 | Failed to restore layer for dem_layer
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dem_band = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: scale = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: geol_layer = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: geol_layer_name = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-126095477255104 | Failed to restore layer for geol_layer
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: geol_field = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: struct_layer = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: struct_layer_name = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-126095477255104 | Failed to restore layer for struct_layer
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: struct_dip_field = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: struct_strike_field = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dh_collar_layer = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-126095477255104 | Failed to restore layer for dh_collar_layer
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dh_collar_id = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dh_use_geom = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dh_collar_x = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dh_collar_y = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dh_collar_z = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dh_collar_depth = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dh_survey_layer = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-126095477255104 | Failed to restore layer for dh_survey_layer
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dh_survey_id = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dh_survey_depth = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dh_survey_azim = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dh_survey_incl = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dh_interval_layer = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-126095477255104 | Failed to restore layer for dh_interval_layer
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dh_interval_id = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dh_interval_from = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dh_interval_to = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dh_interval_lith = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: last_output_dir = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: interp_custom_fields = 1.0
2026-01-15 13:29:24 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-126095477255104 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: show_topo = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: show_geol = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: show_struct = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: show_drillholes = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: show_interpretations = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: auto_lod = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: adaptive_sampling = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: max_points = 1.0
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-126095477255104 | Settings loaded successfully from Project/Global config
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:477 | Thread-126095477255104 | Cache cleared by user
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-126095477255104 | GeologyGenerationTask started (Background Thread)
2026-01-15 13:29:24 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-126095477255104 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-126095477255104 | GeologyGenerationTask started (Background Thread)
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-126095477255104 | GeologyGenerationTask finished with 1 segments
2026-01-15 13:29:24 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-126095477255104 | Test Title: Test Message
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-126095477255104 | Test Title: Test Message
2026-01-15 13:29:24 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-126095477255104 | Test Title: Test Message
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-126095477255104 | CRITICAL_OP: finalize_polygon | points=2
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-126095477255104 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-15 13:29:24 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-126095477255104 | finalize_polygon() aborted - less than 3 points
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-126095477255104 | CRITICAL_OP: finalize_polygon | points=3
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-126095477255104 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-126095477255104 | finalize_polygon() - emitting polygonFinished signal for 57560aa5-ae61-41c9-a21b-4079f296f1b3
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-126095477255104 | Interpretation polygon finalized with 3 vertices, ID: 57560aa5-ae61-41c9-a21b-4079f296f1b3
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-126095477255104 | finalize_polygon() completed
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-126095477255104 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-126095477255104 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-126095477255104 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-126095477255104 | ProfileInterpretationTool.reset() completed
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-126095477255104 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-126095477255104 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-126095477255104 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-126095477255104 | ProfileInterpretationTool.reset() completed
2026-01-15 13:29:24 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-126095477255104 | Failed to create locator for layer layer1: mock error
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-126095477255104 | ProfileInterpretationTool.activate() called
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-126095477255104 | ProfileInterpretationTool activated successfully
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-126095477255104 | ProfileInterpretationTool.deactivate() called
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-126095477255104 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-126095477255104 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-126095477255104 | ProfileInterpretationTool.reset() completed
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-126095477255104 | ProfileInterpretationTool deactivated successfully
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: buffer_dist = 100.5
2026-01-15 13:29:24 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-126095477255104 | Persistent interpretations cleared by reset
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-126095477255104 | Setting saved to project: test_layer = id_123
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-126095477255104 | Setting saved to project: test_layer_name = RealName
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: test_layer = 1.0
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-126095477255104 | Project setting hit: test_layer_name = RealName
2026-01-15 13:29:24 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-126095477255104 | Restoring layer: test_layer -> RealName
2026-01-15 13:29:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-126095477255104 | reset() called, finalized=False
2026-01-15 13:29:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-126095477255104 | finalize_measurement called with 1 points
2026-01-15 13:29:25 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-126095477255104 | Cannot finalize measurement with less than 2 points
2026-01-15 13:29:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-126095477255104 | finalize_measurement called with 2 points
2026-01-15 13:29:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-126095477255104 | Setting finalized = True
2026-01-15 13:29:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-126095477255104 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 13:29:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-126095477255104 | Switching to pan tool to stop measurement
2026-01-15 13:29:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-126095477255104 | Pan tool activated - measurement should be frozen
2026-01-15 13:29:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-126095477255104 | Ignoring click - measurement is finalized
2026-01-15 13:29:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-126095477255104 | finalize_measurement called with 2 points
2026-01-15 13:29:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-126095477255104 | Setting finalized = True
2026-01-15 13:29:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-126095477255104 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 13:29:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-126095477255104 | Switching to pan tool to stop measurement
2026-01-15 13:29:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-126095477255104 | Pan tool activated - measurement should be frozen
2026-01-15 13:29:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-126095477255104 | reset() called, finalized=False
2026-01-15 13:29:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-126095477255104 | reset() called, finalized=False
2026-01-15 13:29:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-126095477255104 | reset() called, finalized=True
2026-01-15 13:29:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-126095477255104 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 13:29:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-126095477255104 | reset() called, finalized=False
2026-01-15 13:29:25 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-126095477255104 | Failed to create locator for layer layer1: mock error
2026-01-15 13:29:25 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-126095477255104 | Failed to create locator for layer l2: fail
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-126095477255104 | ProfileMeasureTool activated
2026-01-15 13:29:25 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-126095477255104 | reset() called, finalized=False
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-126095477255104 | ProfileMeasureTool deactivated
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-126095477255104 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:29:25 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-126095477255104 | Failed to create memory layer: Fail
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126095477255104 | render() called
2026-01-15 13:29:25 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-126095477255104 | No valid layers to render
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126095477255104 | render() called
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126095477255104 | render() called
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126095477255104 | render() called
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126095477255104 | render() called
2026-01-15 13:29:25 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-126095477255104 | No valid layers to render
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126095477255104 | render() called
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126095477255104 | render() called
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126095477255104 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-126095477255104 | ProfileController initialized
2026-01-15 13:29:25 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-126095477255104 | Loaded 0 interpretations from project
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dem_band = 1
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: scale = 50000.0
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dh_use_geom = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: show_topo = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: show_geol = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: show_struct = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: show_drillholes = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: show_interpretations = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: auto_lod = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: max_points = 10000
2026-01-15 13:29:25 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-126095477255104 | Settings loaded successfully from Project/Global config
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-126095477255104 | Saved 1 interpretations to project
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126095477255104 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-126095477255104 | ProfileController initialized
2026-01-15 13:29:25 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-126095477255104 | Loaded 0 interpretations from project
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dem_band = 1
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: scale = 50000.0
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dh_use_geom = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: show_topo = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: show_geol = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: show_struct = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: show_drillholes = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: show_interpretations = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: auto_lod = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: max_points = 10000
2026-01-15 13:29:25 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-126095477255104 | Settings loaded successfully from Project/Global config
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-126095477255104 | Saved 1 interpretations to project
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-126095477255104 | Saved 0 interpretations to project
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126095477255104 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-126095477255104 | ProfileController initialized
2026-01-15 13:29:25 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-126095477255104 | Loaded 0 interpretations from project
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dem_band = 1
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: scale = 50000.0
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dh_use_geom = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: show_topo = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: show_geol = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: show_struct = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: show_drillholes = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: show_interpretations = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: auto_lod = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: max_points = 10000
2026-01-15 13:29:25 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-126095477255104 | Settings loaded successfully from Project/Global config
2026-01-15 13:29:25 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-126095477255104 | Loaded 1 interpretations from project
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126095477255104 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-126095477255104 | ProfileController initialized
2026-01-15 13:29:25 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-126095477255104 | Loaded 1 interpretations from project
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dem_band = 1
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: scale = 50000.0
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: dh_use_geom = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: show_topo = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: show_geol = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: show_struct = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: show_drillholes = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: show_interpretations = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: auto_lod = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:29:25 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126095477255104 | Global setting fallback: max_points = 10000
2026-01-15 13:29:25 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-126095477255104 | Settings loaded successfully from Project/Global config
2026-01-15 13:29:41 | DEBUG    | SecInterp | setup_logging:142 | Thread-136121221581760 | Logging system initialized. Root Level: 10
2026-01-15 13:29:41 | DEBUG    | SecInterp | setup_logging:143 | Thread-136121221581760 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 13:29:53 | DEBUG    | SecInterp | setup_logging:142 | Thread-130225933802432 | Logging system initialized. Root Level: 10
2026-01-15 13:29:53 | DEBUG    | SecInterp | setup_logging:143 | Thread-130225933802432 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 13:30:19 | DEBUG    | SecInterp | setup_logging:142 | Thread-131740217392064 | Logging system initialized. Root Level: 10
2026-01-15 13:30:19 | DEBUG    | SecInterp | setup_logging:143 | Thread-131740217392064 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:211 | Thread-131740217392064 | Configuration reset to defaults initiated
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131740217392064 | Config set: SecInterp/scale = 200.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131740217392064 | Config set: SecInterp/scale = 20000.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131740217392064 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131740217392064 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131740217392064 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-131740217392064 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-131740217392064 | No collars found within buffer area.
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-131740217392064 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-131740217392064 | DrillholeService.project_collars END: Found 1 collars.
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-131740217392064 | ✓ Saving profile axes...
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-131740217392064 | ✓ Saving topographic profile...
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-131740217392064 | ✓ Saving profile axes...
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-131740217392064 | ✓ Saving interpretation data...
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-131740217392064 | 3D Export features are restricted for this user.
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-131740217392064 | ✓ Saving topographic profile...
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-131740217392064 | ✓ Saving profile axes...
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-131740217392064 | ✓ Saving interpretation data...
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-131740217392064 | ✓ Saving 3D interpretation data...
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-131740217392064 | ✓ Saving topographic profile...
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-131740217392064 | ✓ Saving profile axes...
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-131740217392064 | ✓ Saving geological profile...
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-131740217392064 | ✓ Saving structural profile...
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-131740217392064 | ✓ Saving drillhole data...
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-131740217392064 | ✓ Saving interpretation data...
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-131740217392064 | Access denied for restricted feature: 3D Export
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-131740217392064 | 3D Export features are restricted for this user.
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-131740217392064 | ✓ Saving topographic profile...
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-131740217392064 | ✓ Saving profile axes...
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-131740217392064 | No interpretations provided for export.
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-131740217392064 | ✓ Saving drillhole data...
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-131740217392064 | ✓ Saving geological profile...
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-131740217392064 | ✓ Saving interpretation data...
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-131740217392064 | ✓ Saving 3D interpretation data...
2026-01-15 13:30:20 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-131740217392064 | Invalid section line layer, skipping 3D export.
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-131740217392064 | ✓ Saving interpretation data...
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-131740217392064 | ✓ Saving structural profile...
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-131740217392064 | ✓ Saving topographic profile...
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-131740217392064 | Generating master profile with interval=10.00
2026-01-15 13:30:20 | WARNING  | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:308 | Thread-131740217392064 | Failed to generate master grid: type object 'MockQgsWkbTypes' has no attribute 'LineGeometry'
2026-01-15 13:30:20 | INFO     | SecInterp.performance | measure_operation:244 | Thread-131740217392064 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0031, 'memory_mb': 0.0, 'memory_peak_mb': 0.01, 'timestamp': '2026-01-15 13:30:20', 'args_count': 5, 'kwargs_keys': []}
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-131740217392064 | Generating master profile with interval=50.00
2026-01-15 13:30:20 | WARNING  | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:308 | Thread-131740217392064 | Failed to generate master grid: type object 'MockQgsWkbTypes' has no attribute 'LineGeometry'
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-131740217392064 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-131740217392064 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-131740217392064 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-131740217392064 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-131740217392064 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-131740217392064 | Running geometry operation: test
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-131740217392064 | Generated 1 drillhole traces
2026-01-15 13:30:20 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-131740217392064 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:30:20 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-131740217392064 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-131740217392064 | Generated 1 drillhole traces
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-131740217392064 | Drillhole preview skipped: No Collar ID field selected.
2026-01-15 13:30:20 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-131740217392064 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:30:20 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-131740217392064 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:30:20 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-131740217392064 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:30:20 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-131740217392064 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:30:20 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-131740217392064 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-131740217392064 | Analyzing structures in Structure Layer with buffer 10m
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-131740217392064 | Processed 1 structural measurements from Structure Layer
2026-01-15 13:30:20 | ERROR    | SecInterp.sec_interp.exporters.drillhole_3d_exporter | export:141 | Thread-131740217392064 | Failed to export 3D drillhole intervals to /tmp/tmpb7nsivzf/intervals_3d_proj.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/drillhole_3d_exporter.py", line 127, in export
    geom = QgsGeometry.fromPolyline(points)
           ^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: type object 'MockQgsGeometry' has no attribute 'fromPolyline'. Did you mean: 'fromPolylineZ'?
2026-01-15 13:30:20 | ERROR    | SecInterp.sec_interp.exporters.drillhole_3d_exporter | export:141 | Thread-131740217392064 | Failed to export 3D drillhole intervals to /tmp/tmp19429z7l/intervals_3d_real.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/drillhole_3d_exporter.py", line 127, in export
    geom = QgsGeometry.fromPolyline(points)
           ^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: type object 'MockQgsGeometry' has no attribute 'fromPolyline'. Did you mean: 'fromPolylineZ'?
2026-01-15 13:30:20 | ERROR    | SecInterp.sec_interp.exporters.drillhole_3d_exporter | export:73 | Thread-131740217392064 | Failed to export 3D drillhole traces to /tmp/tmptbo028kh/traces_3d_proj.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/drillhole_3d_exporter.py", line 63, in export
    geom = QgsGeometry.fromPolyline(points)
           ^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: type object 'MockQgsGeometry' has no attribute 'fromPolyline'. Did you mean: 'fromPolylineZ'?
2026-01-15 13:30:20 | ERROR    | SecInterp.sec_interp.exporters.drillhole_3d_exporter | export:73 | Thread-131740217392064 | Failed to export 3D drillhole traces to /tmp/tmpnd8233a2/traces_3d_real.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/drillhole_3d_exporter.py", line 63, in export
    geom = QgsGeometry.fromPolyline(points)
           ^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: type object 'MockQgsGeometry' has no attribute 'fromPolyline'. Did you mean: 'fromPolylineZ'?
2026-01-15 13:30:20 | ERROR    | SecInterp.sec_interp.exporters.interpretation_exporters | export:77 | Thread-131740217392064 | Failed to export interpretations to /tmp/test_dynamic.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 74, in export
    return self._write_to_file(layer, output_path)
           ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 135, in _write_to_file
    result, error_msg, _new_layer_id, _new_layer_path = (
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 4, got 0)
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-131740217392064 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-131740217392064 | Generated QML style: /tmp/test.qml
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-131740217392064 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-131740217392064 | Generated QML style: dummy.qml
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-131740217392064 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-131740217392064 | Generated QML style: dummy.qml
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-131740217392064 | Loaded 0 interpretations from project
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:369 | Thread-131740217392064 | Inherited attributes from geology: GeologyUnit
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-131740217392064 | Loaded 0 interpretations from project
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: section_layer = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: section_layer_name = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-131740217392064 | Failed to restore layer for section_layer
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: buffer_dist = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dem_layer = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dem_layer_name = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-131740217392064 | Failed to restore layer for dem_layer
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dem_band = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: scale = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: geol_layer = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: geol_layer_name = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-131740217392064 | Failed to restore layer for geol_layer
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: geol_field = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: struct_layer = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: struct_layer_name = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-131740217392064 | Failed to restore layer for struct_layer
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: struct_dip_field = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: struct_strike_field = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dh_collar_layer = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-131740217392064 | Failed to restore layer for dh_collar_layer
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dh_collar_id = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dh_use_geom = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dh_collar_x = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dh_collar_y = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dh_collar_z = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dh_collar_depth = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dh_survey_layer = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-131740217392064 | Failed to restore layer for dh_survey_layer
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dh_survey_id = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dh_survey_depth = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dh_survey_azim = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dh_survey_incl = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dh_interval_layer = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-131740217392064 | Failed to restore layer for dh_interval_layer
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dh_interval_id = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dh_interval_from = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dh_interval_to = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dh_interval_lith = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: last_output_dir = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: interp_custom_fields = 1.0
2026-01-15 13:30:20 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-131740217392064 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: show_topo = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: show_geol = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: show_struct = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: show_drillholes = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: show_interpretations = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: auto_lod = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: adaptive_sampling = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: max_points = 1.0
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-131740217392064 | Settings loaded successfully from Project/Global config
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:477 | Thread-131740217392064 | Cache cleared by user
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-131740217392064 | GeologyGenerationTask started (Background Thread)
2026-01-15 13:30:20 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-131740217392064 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-131740217392064 | GeologyGenerationTask started (Background Thread)
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-131740217392064 | GeologyGenerationTask finished with 1 segments
2026-01-15 13:30:20 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-131740217392064 | Test Title: Test Message
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-131740217392064 | Test Title: Test Message
2026-01-15 13:30:20 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-131740217392064 | Test Title: Test Message
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-131740217392064 | CRITICAL_OP: finalize_polygon | points=2
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-131740217392064 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-15 13:30:20 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-131740217392064 | finalize_polygon() aborted - less than 3 points
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-131740217392064 | CRITICAL_OP: finalize_polygon | points=3
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-131740217392064 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-131740217392064 | finalize_polygon() - emitting polygonFinished signal for f0e486a8-9f30-4177-9305-13dcc2ad7dde
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-131740217392064 | Interpretation polygon finalized with 3 vertices, ID: f0e486a8-9f30-4177-9305-13dcc2ad7dde
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-131740217392064 | finalize_polygon() completed
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-131740217392064 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-131740217392064 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-131740217392064 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-131740217392064 | ProfileInterpretationTool.reset() completed
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-131740217392064 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-131740217392064 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-131740217392064 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-131740217392064 | ProfileInterpretationTool.reset() completed
2026-01-15 13:30:20 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-131740217392064 | Failed to create locator for layer layer1: mock error
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-131740217392064 | ProfileInterpretationTool.activate() called
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-131740217392064 | ProfileInterpretationTool activated successfully
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-131740217392064 | ProfileInterpretationTool.deactivate() called
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-131740217392064 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-131740217392064 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-131740217392064 | ProfileInterpretationTool.reset() completed
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-131740217392064 | ProfileInterpretationTool deactivated successfully
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: buffer_dist = 100.5
2026-01-15 13:30:20 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-131740217392064 | Persistent interpretations cleared by reset
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-131740217392064 | Setting saved to project: test_layer = id_123
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-131740217392064 | Setting saved to project: test_layer_name = RealName
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: test_layer = 1.0
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131740217392064 | Project setting hit: test_layer_name = RealName
2026-01-15 13:30:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-131740217392064 | Restoring layer: test_layer -> RealName
2026-01-15 13:30:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-131740217392064 | reset() called, finalized=False
2026-01-15 13:30:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-131740217392064 | finalize_measurement called with 1 points
2026-01-15 13:30:21 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-131740217392064 | Cannot finalize measurement with less than 2 points
2026-01-15 13:30:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-131740217392064 | finalize_measurement called with 2 points
2026-01-15 13:30:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-131740217392064 | Setting finalized = True
2026-01-15 13:30:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-131740217392064 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 13:30:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-131740217392064 | Switching to pan tool to stop measurement
2026-01-15 13:30:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-131740217392064 | Pan tool activated - measurement should be frozen
2026-01-15 13:30:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-131740217392064 | Ignoring click - measurement is finalized
2026-01-15 13:30:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-131740217392064 | finalize_measurement called with 2 points
2026-01-15 13:30:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-131740217392064 | Setting finalized = True
2026-01-15 13:30:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-131740217392064 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 13:30:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-131740217392064 | Switching to pan tool to stop measurement
2026-01-15 13:30:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-131740217392064 | Pan tool activated - measurement should be frozen
2026-01-15 13:30:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-131740217392064 | reset() called, finalized=False
2026-01-15 13:30:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-131740217392064 | reset() called, finalized=False
2026-01-15 13:30:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-131740217392064 | reset() called, finalized=True
2026-01-15 13:30:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-131740217392064 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 13:30:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-131740217392064 | reset() called, finalized=False
2026-01-15 13:30:21 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-131740217392064 | Failed to create locator for layer layer1: mock error
2026-01-15 13:30:21 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-131740217392064 | Failed to create locator for layer l2: fail
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-131740217392064 | ProfileMeasureTool activated
2026-01-15 13:30:21 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-131740217392064 | reset() called, finalized=False
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-131740217392064 | ProfileMeasureTool deactivated
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-131740217392064 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:30:21 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-131740217392064 | Adding 1 drillhole trace features to layer
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-131740217392064 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:30:21 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-131740217392064 | Adding 1 drillhole trace features to layer
2026-01-15 13:30:21 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-131740217392064 | Failed to create memory layer: Fail
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-131740217392064 | create_drillhole_trace_layer called with 0 holes
2026-01-15 13:30:21 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-131740217392064 | No drillhole data provided for trace layer
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-131740217392064 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-131740217392064 | Skipping hole H1: insufficient trace points (1)
2026-01-15 13:30:21 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-131740217392064 | Adding 0 drillhole trace features to layer
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-131740217392064 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131740217392064 | render() called
2026-01-15 13:30:21 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-131740217392064 | No valid layers to render
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131740217392064 | render() called
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131740217392064 | render() called
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131740217392064 | render() called
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131740217392064 | render() called
2026-01-15 13:30:21 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-131740217392064 | No valid layers to render
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131740217392064 | render() called
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131740217392064 | render() called
2026-01-15 13:30:21 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-131740217392064 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-15 13:30:21 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-131740217392064 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131740217392064 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-131740217392064 | ProfileController initialized
2026-01-15 13:30:21 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-131740217392064 | Loaded 0 interpretations from project
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dem_band = 1
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: scale = 50000.0
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dh_use_geom = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: show_topo = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: show_geol = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: show_struct = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: show_drillholes = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: show_interpretations = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: auto_lod = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: max_points = 10000
2026-01-15 13:30:21 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-131740217392064 | Settings loaded successfully from Project/Global config
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-131740217392064 | Saved 1 interpretations to project
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131740217392064 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-131740217392064 | ProfileController initialized
2026-01-15 13:30:21 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-131740217392064 | Loaded 0 interpretations from project
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dem_band = 1
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: scale = 50000.0
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dh_use_geom = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: show_topo = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: show_geol = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: show_struct = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: show_drillholes = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: show_interpretations = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: auto_lod = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: max_points = 10000
2026-01-15 13:30:21 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-131740217392064 | Settings loaded successfully from Project/Global config
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-131740217392064 | Saved 1 interpretations to project
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-131740217392064 | Saved 0 interpretations to project
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131740217392064 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-131740217392064 | ProfileController initialized
2026-01-15 13:30:21 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-131740217392064 | Loaded 0 interpretations from project
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dem_band = 1
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: scale = 50000.0
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dh_use_geom = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: show_topo = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: show_geol = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: show_struct = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: show_drillholes = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: show_interpretations = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: auto_lod = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: max_points = 10000
2026-01-15 13:30:21 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-131740217392064 | Settings loaded successfully from Project/Global config
2026-01-15 13:30:21 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-131740217392064 | Loaded 1 interpretations from project
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131740217392064 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-131740217392064 | ProfileController initialized
2026-01-15 13:30:21 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-131740217392064 | Loaded 1 interpretations from project
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dem_band = 1
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: scale = 50000.0
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: dh_use_geom = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: show_topo = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: show_geol = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: show_struct = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: show_drillholes = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: show_interpretations = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: auto_lod = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:30:21 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131740217392064 | Global setting fallback: max_points = 10000
2026-01-15 13:30:21 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-131740217392064 | Settings loaded successfully from Project/Global config
2026-01-15 13:30:58 | DEBUG    | SecInterp | setup_logging:142 | Thread-135696807586752 | Logging system initialized. Root Level: 10
2026-01-15 13:30:58 | DEBUG    | SecInterp | setup_logging:143 | Thread-135696807586752 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:211 | Thread-135696807586752 | Configuration reset to defaults initiated
2026-01-15 13:30:58 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135696807586752 | Config set: SecInterp/scale = 200.0
2026-01-15 13:30:58 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135696807586752 | Config set: SecInterp/scale = 20000.0
2026-01-15 13:30:58 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135696807586752 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:30:58 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135696807586752 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:30:58 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135696807586752 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-135696807586752 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-135696807586752 | No collars found within buffer area.
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-135696807586752 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-135696807586752 | DrillholeService.project_collars END: Found 1 collars.
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-135696807586752 | ✓ Saving profile axes...
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-135696807586752 | ✓ Saving topographic profile...
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-135696807586752 | ✓ Saving profile axes...
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-135696807586752 | ✓ Saving interpretation data...
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-135696807586752 | 3D Export features are restricted for this user.
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-135696807586752 | ✓ Saving topographic profile...
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-135696807586752 | ✓ Saving profile axes...
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-135696807586752 | ✓ Saving interpretation data...
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-135696807586752 | ✓ Saving 3D interpretation data...
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-135696807586752 | ✓ Saving topographic profile...
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-135696807586752 | ✓ Saving profile axes...
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-135696807586752 | ✓ Saving geological profile...
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-135696807586752 | ✓ Saving structural profile...
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-135696807586752 | ✓ Saving drillhole data...
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-135696807586752 | ✓ Saving interpretation data...
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-135696807586752 | Access denied for restricted feature: 3D Export
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-135696807586752 | 3D Export features are restricted for this user.
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-135696807586752 | ✓ Saving topographic profile...
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-135696807586752 | ✓ Saving profile axes...
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-135696807586752 | No interpretations provided for export.
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-135696807586752 | ✓ Saving drillhole data...
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-135696807586752 | ✓ Saving geological profile...
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-135696807586752 | ✓ Saving interpretation data...
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-135696807586752 | ✓ Saving 3D interpretation data...
2026-01-15 13:30:58 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-135696807586752 | Invalid section line layer, skipping 3D export.
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-135696807586752 | ✓ Saving interpretation data...
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-135696807586752 | ✓ Saving structural profile...
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-135696807586752 | ✓ Saving topographic profile...
2026-01-15 13:30:58 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-135696807586752 | Generating master profile with interval=10.00
2026-01-15 13:30:58 | WARNING  | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:308 | Thread-135696807586752 | Failed to generate master grid: type object 'MockQgsWkbTypes' has no attribute 'LineGeometry'
2026-01-15 13:30:58 | INFO     | SecInterp.performance | measure_operation:244 | Thread-135696807586752 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0022, 'memory_mb': 0.0, 'memory_peak_mb': 0.01, 'timestamp': '2026-01-15 13:30:58', 'args_count': 5, 'kwargs_keys': []}
2026-01-15 13:30:58 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-135696807586752 | Generating master profile with interval=50.00
2026-01-15 13:30:58 | WARNING  | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:308 | Thread-135696807586752 | Failed to generate master grid: type object 'MockQgsWkbTypes' has no attribute 'LineGeometry'
2026-01-15 13:30:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-135696807586752 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 13:30:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-135696807586752 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 13:30:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-135696807586752 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-15 13:30:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-135696807586752 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-15 13:30:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-135696807586752 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-15 13:30:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-135696807586752 | Running geometry operation: test
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-135696807586752 | Generated 1 drillhole traces
2026-01-15 13:30:58 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-135696807586752 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:30:58 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-135696807586752 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-135696807586752 | Generated 1 drillhole traces
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-135696807586752 | Drillhole preview skipped: No Collar ID field selected.
2026-01-15 13:30:58 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-135696807586752 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:30:58 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-135696807586752 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:30:58 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-135696807586752 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:30:58 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-135696807586752 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:30:58 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-135696807586752 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-135696807586752 | Analyzing structures in Structure Layer with buffer 10m
2026-01-15 13:30:58 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-135696807586752 | Processed 1 structural measurements from Structure Layer
2026-01-15 13:30:59 | ERROR    | SecInterp.sec_interp.exporters.interpretation_exporters | export:77 | Thread-135696807586752 | Failed to export interpretations to /tmp/test_dynamic.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 74, in export
    return self._write_to_file(layer, output_path)
           ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 135, in _write_to_file
    result, error_msg, _new_layer_id, _new_layer_path = (
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 4, got 0)
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-135696807586752 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-135696807586752 | Generated QML style: /tmp/test.qml
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-135696807586752 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-135696807586752 | Generated QML style: dummy.qml
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-135696807586752 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-135696807586752 | Generated QML style: dummy.qml
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-135696807586752 | Loaded 0 interpretations from project
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:369 | Thread-135696807586752 | Inherited attributes from geology: GeologyUnit
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-135696807586752 | Loaded 0 interpretations from project
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: section_layer = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: section_layer_name = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-135696807586752 | Failed to restore layer for section_layer
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: buffer_dist = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dem_layer = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dem_layer_name = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-135696807586752 | Failed to restore layer for dem_layer
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dem_band = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: scale = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: geol_layer = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: geol_layer_name = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-135696807586752 | Failed to restore layer for geol_layer
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: geol_field = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: struct_layer = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: struct_layer_name = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-135696807586752 | Failed to restore layer for struct_layer
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: struct_dip_field = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: struct_strike_field = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dh_collar_layer = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-135696807586752 | Failed to restore layer for dh_collar_layer
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dh_collar_id = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dh_use_geom = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dh_collar_x = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dh_collar_y = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dh_collar_z = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dh_collar_depth = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dh_survey_layer = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-135696807586752 | Failed to restore layer for dh_survey_layer
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dh_survey_id = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dh_survey_depth = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dh_survey_azim = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dh_survey_incl = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dh_interval_layer = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-135696807586752 | Failed to restore layer for dh_interval_layer
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dh_interval_id = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dh_interval_from = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dh_interval_to = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dh_interval_lith = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: last_output_dir = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: interp_custom_fields = 1.0
2026-01-15 13:30:59 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-135696807586752 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: show_topo = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: show_geol = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: show_struct = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: show_drillholes = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: show_interpretations = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: auto_lod = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: adaptive_sampling = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: max_points = 1.0
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-135696807586752 | Settings loaded successfully from Project/Global config
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:477 | Thread-135696807586752 | Cache cleared by user
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-135696807586752 | GeologyGenerationTask started (Background Thread)
2026-01-15 13:30:59 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-135696807586752 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-135696807586752 | GeologyGenerationTask started (Background Thread)
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-135696807586752 | GeologyGenerationTask finished with 1 segments
2026-01-15 13:30:59 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-135696807586752 | Test Title: Test Message
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-135696807586752 | Test Title: Test Message
2026-01-15 13:30:59 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-135696807586752 | Test Title: Test Message
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-135696807586752 | CRITICAL_OP: finalize_polygon | points=2
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-135696807586752 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-15 13:30:59 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-135696807586752 | finalize_polygon() aborted - less than 3 points
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-135696807586752 | CRITICAL_OP: finalize_polygon | points=3
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-135696807586752 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-135696807586752 | finalize_polygon() - emitting polygonFinished signal for d7a37b0b-ec5d-4de2-81da-9687b9c8b269
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-135696807586752 | Interpretation polygon finalized with 3 vertices, ID: d7a37b0b-ec5d-4de2-81da-9687b9c8b269
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-135696807586752 | finalize_polygon() completed
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-135696807586752 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-135696807586752 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-135696807586752 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-135696807586752 | ProfileInterpretationTool.reset() completed
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-135696807586752 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-135696807586752 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-135696807586752 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-135696807586752 | ProfileInterpretationTool.reset() completed
2026-01-15 13:30:59 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-135696807586752 | Failed to create locator for layer layer1: mock error
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-135696807586752 | ProfileInterpretationTool.activate() called
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-135696807586752 | ProfileInterpretationTool activated successfully
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-135696807586752 | ProfileInterpretationTool.deactivate() called
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-135696807586752 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-135696807586752 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-135696807586752 | ProfileInterpretationTool.reset() completed
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-135696807586752 | ProfileInterpretationTool deactivated successfully
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: buffer_dist = 100.5
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-135696807586752 | Persistent interpretations cleared by reset
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-135696807586752 | Setting saved to project: test_layer = id_123
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-135696807586752 | Setting saved to project: test_layer_name = RealName
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: test_layer = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-135696807586752 | Project setting hit: test_layer_name = RealName
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-135696807586752 | Restoring layer: test_layer -> RealName
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-135696807586752 | reset() called, finalized=False
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-135696807586752 | finalize_measurement called with 1 points
2026-01-15 13:30:59 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-135696807586752 | Cannot finalize measurement with less than 2 points
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-135696807586752 | finalize_measurement called with 2 points
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-135696807586752 | Setting finalized = True
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-135696807586752 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-135696807586752 | Switching to pan tool to stop measurement
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-135696807586752 | Pan tool activated - measurement should be frozen
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-135696807586752 | Ignoring click - measurement is finalized
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-135696807586752 | finalize_measurement called with 2 points
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-135696807586752 | Setting finalized = True
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-135696807586752 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-135696807586752 | Switching to pan tool to stop measurement
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-135696807586752 | Pan tool activated - measurement should be frozen
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-135696807586752 | reset() called, finalized=False
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-135696807586752 | reset() called, finalized=False
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-135696807586752 | reset() called, finalized=True
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-135696807586752 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-135696807586752 | reset() called, finalized=False
2026-01-15 13:30:59 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-135696807586752 | Failed to create locator for layer layer1: mock error
2026-01-15 13:30:59 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-135696807586752 | Failed to create locator for layer l2: fail
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-135696807586752 | ProfileMeasureTool activated
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-135696807586752 | reset() called, finalized=False
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-135696807586752 | ProfileMeasureTool deactivated
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-135696807586752 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-135696807586752 | Adding 1 drillhole trace features to layer
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-135696807586752 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-135696807586752 | Adding 1 drillhole trace features to layer
2026-01-15 13:30:59 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-135696807586752 | Failed to create memory layer: Fail
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-135696807586752 | create_drillhole_trace_layer called with 0 holes
2026-01-15 13:30:59 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-135696807586752 | No drillhole data provided for trace layer
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-135696807586752 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-135696807586752 | Skipping hole H1: insufficient trace points (1)
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-135696807586752 | Adding 0 drillhole trace features to layer
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-135696807586752 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-135696807586752 | render() called
2026-01-15 13:30:59 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-135696807586752 | No valid layers to render
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-135696807586752 | render() called
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-135696807586752 | render() called
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-135696807586752 | render() called
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-135696807586752 | render() called
2026-01-15 13:30:59 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-135696807586752 | No valid layers to render
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-135696807586752 | render() called
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-135696807586752 | render() called
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-135696807586752 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-135696807586752 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135696807586752 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-135696807586752 | ProfileController initialized
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-135696807586752 | Loaded 0 interpretations from project
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dem_band = 1
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: scale = 50000.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dh_use_geom = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: show_topo = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: show_geol = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: show_struct = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: show_drillholes = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: show_interpretations = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: auto_lod = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: max_points = 10000
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-135696807586752 | Settings loaded successfully from Project/Global config
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-135696807586752 | Saved 1 interpretations to project
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135696807586752 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-135696807586752 | ProfileController initialized
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-135696807586752 | Loaded 0 interpretations from project
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dem_band = 1
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: scale = 50000.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dh_use_geom = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: show_topo = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: show_geol = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: show_struct = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: show_drillholes = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: show_interpretations = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: auto_lod = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: max_points = 10000
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-135696807586752 | Settings loaded successfully from Project/Global config
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-135696807586752 | Saved 1 interpretations to project
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-135696807586752 | Saved 0 interpretations to project
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135696807586752 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-135696807586752 | ProfileController initialized
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-135696807586752 | Loaded 0 interpretations from project
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dem_band = 1
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: scale = 50000.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dh_use_geom = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: show_topo = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: show_geol = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: show_struct = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: show_drillholes = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: show_interpretations = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: auto_lod = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: max_points = 10000
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-135696807586752 | Settings loaded successfully from Project/Global config
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-135696807586752 | Loaded 1 interpretations from project
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135696807586752 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-135696807586752 | ProfileController initialized
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-135696807586752 | Loaded 1 interpretations from project
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dem_band = 1
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: scale = 50000.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: dh_use_geom = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: show_topo = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: show_geol = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: show_struct = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: show_drillholes = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: show_interpretations = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: auto_lod = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:30:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135696807586752 | Global setting fallback: max_points = 10000
2026-01-15 13:30:59 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-135696807586752 | Settings loaded successfully from Project/Global config
2026-01-15 13:32:35 | DEBUG    | SecInterp | setup_logging:142 | Thread-128641469737920 | Logging system initialized. Root Level: 10
2026-01-15 13:32:35 | DEBUG    | SecInterp | setup_logging:143 | Thread-128641469737920 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:211 | Thread-128641469737920 | Configuration reset to defaults initiated
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128641469737920 | Config set: SecInterp/scale = 200.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128641469737920 | Config set: SecInterp/scale = 20000.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128641469737920 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128641469737920 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128641469737920 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-128641469737920 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-128641469737920 | No collars found within buffer area.
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-128641469737920 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-128641469737920 | DrillholeService.project_collars END: Found 1 collars.
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-128641469737920 | ✓ Saving profile axes...
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-128641469737920 | ✓ Saving topographic profile...
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-128641469737920 | ✓ Saving profile axes...
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-128641469737920 | ✓ Saving interpretation data...
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-128641469737920 | 3D Export features are restricted for this user.
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-128641469737920 | ✓ Saving topographic profile...
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-128641469737920 | ✓ Saving profile axes...
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-128641469737920 | ✓ Saving interpretation data...
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-128641469737920 | ✓ Saving 3D interpretation data...
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-128641469737920 | ✓ Saving topographic profile...
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-128641469737920 | ✓ Saving profile axes...
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-128641469737920 | ✓ Saving geological profile...
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-128641469737920 | ✓ Saving structural profile...
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-128641469737920 | ✓ Saving drillhole data...
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-128641469737920 | ✓ Saving interpretation data...
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-128641469737920 | Access denied for restricted feature: 3D Export
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-128641469737920 | 3D Export features are restricted for this user.
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-128641469737920 | ✓ Saving topographic profile...
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-128641469737920 | ✓ Saving profile axes...
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-128641469737920 | No interpretations provided for export.
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-128641469737920 | ✓ Saving drillhole data...
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-128641469737920 | ✓ Saving geological profile...
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-128641469737920 | ✓ Saving interpretation data...
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-128641469737920 | ✓ Saving 3D interpretation data...
2026-01-15 13:32:36 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-128641469737920 | Invalid section line layer, skipping 3D export.
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-128641469737920 | ✓ Saving interpretation data...
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-128641469737920 | ✓ Saving structural profile...
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-128641469737920 | ✓ Saving topographic profile...
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-128641469737920 | Generating master profile with interval=10.00
2026-01-15 13:32:36 | INFO     | SecInterp.performance | measure_operation:244 | Thread-128641469737920 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0028, 'memory_mb': 0.0, 'memory_peak_mb': 0.13, 'timestamp': '2026-01-15 13:32:36', 'args_count': 5, 'kwargs_keys': []}
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-128641469737920 | Generating master profile with interval=50.00
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-128641469737920 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-128641469737920 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-128641469737920 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-128641469737920 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-128641469737920 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-128641469737920 | Running geometry operation: test
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-128641469737920 | Generated 1 drillhole traces
2026-01-15 13:32:36 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-128641469737920 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:32:36 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-128641469737920 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-128641469737920 | Generated 1 drillhole traces
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-128641469737920 | Drillhole preview skipped: No Collar ID field selected.
2026-01-15 13:32:36 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-128641469737920 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:32:36 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-128641469737920 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:32:36 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-128641469737920 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:32:36 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-128641469737920 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:32:36 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-128641469737920 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-128641469737920 | Analyzing structures in Structure Layer with buffer 10m
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-128641469737920 | Processed 1 structural measurements from Structure Layer
2026-01-15 13:32:36 | ERROR    | SecInterp.sec_interp.exporters.interpretation_exporters | export:77 | Thread-128641469737920 | Failed to export interpretations to /tmp/test_dynamic.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 74, in export
    return self._write_to_file(layer, output_path)
           ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 135, in _write_to_file
    result, error_msg, _new_layer_id, _new_layer_path = (
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 4, got 0)
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-128641469737920 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-128641469737920 | Generated QML style: /tmp/test.qml
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-128641469737920 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-128641469737920 | Generated QML style: dummy.qml
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-128641469737920 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-128641469737920 | Generated QML style: dummy.qml
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-128641469737920 | Loaded 0 interpretations from project
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:369 | Thread-128641469737920 | Inherited attributes from geology: GeologyUnit
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-128641469737920 | Loaded 0 interpretations from project
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: section_layer = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: section_layer_name = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-128641469737920 | Failed to restore layer for section_layer
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: buffer_dist = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dem_layer = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dem_layer_name = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-128641469737920 | Failed to restore layer for dem_layer
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dem_band = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: scale = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: geol_layer = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: geol_layer_name = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-128641469737920 | Failed to restore layer for geol_layer
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: geol_field = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: struct_layer = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: struct_layer_name = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-128641469737920 | Failed to restore layer for struct_layer
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: struct_dip_field = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: struct_strike_field = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dh_collar_layer = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-128641469737920 | Failed to restore layer for dh_collar_layer
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dh_collar_id = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dh_use_geom = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dh_collar_x = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dh_collar_y = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dh_collar_z = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dh_collar_depth = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dh_survey_layer = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-128641469737920 | Failed to restore layer for dh_survey_layer
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dh_survey_id = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dh_survey_depth = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dh_survey_azim = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dh_survey_incl = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dh_interval_layer = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-128641469737920 | Failed to restore layer for dh_interval_layer
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dh_interval_id = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dh_interval_from = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dh_interval_to = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dh_interval_lith = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: last_output_dir = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: interp_custom_fields = 1.0
2026-01-15 13:32:36 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-128641469737920 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: show_topo = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: show_geol = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: show_struct = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: show_drillholes = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: show_interpretations = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: auto_lod = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: adaptive_sampling = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: max_points = 1.0
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-128641469737920 | Settings loaded successfully from Project/Global config
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:477 | Thread-128641469737920 | Cache cleared by user
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-128641469737920 | GeologyGenerationTask started (Background Thread)
2026-01-15 13:32:36 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-128641469737920 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-128641469737920 | GeologyGenerationTask started (Background Thread)
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-128641469737920 | GeologyGenerationTask finished with 1 segments
2026-01-15 13:32:36 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-128641469737920 | Test Title: Test Message
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-128641469737920 | Test Title: Test Message
2026-01-15 13:32:36 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-128641469737920 | Test Title: Test Message
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-128641469737920 | CRITICAL_OP: finalize_polygon | points=2
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-128641469737920 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-15 13:32:36 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-128641469737920 | finalize_polygon() aborted - less than 3 points
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-128641469737920 | CRITICAL_OP: finalize_polygon | points=3
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-128641469737920 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-128641469737920 | finalize_polygon() - emitting polygonFinished signal for 65482e6a-be58-42d0-babb-fdd2ae209d21
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-128641469737920 | Interpretation polygon finalized with 3 vertices, ID: 65482e6a-be58-42d0-babb-fdd2ae209d21
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-128641469737920 | finalize_polygon() completed
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-128641469737920 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-128641469737920 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-128641469737920 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-128641469737920 | ProfileInterpretationTool.reset() completed
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-128641469737920 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-128641469737920 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-128641469737920 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-128641469737920 | ProfileInterpretationTool.reset() completed
2026-01-15 13:32:36 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-128641469737920 | Failed to create locator for layer layer1: mock error
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-128641469737920 | ProfileInterpretationTool.activate() called
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-128641469737920 | ProfileInterpretationTool activated successfully
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-128641469737920 | ProfileInterpretationTool.deactivate() called
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-128641469737920 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-128641469737920 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-128641469737920 | ProfileInterpretationTool.reset() completed
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-128641469737920 | ProfileInterpretationTool deactivated successfully
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: buffer_dist = 100.5
2026-01-15 13:32:36 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-128641469737920 | Persistent interpretations cleared by reset
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-128641469737920 | Setting saved to project: test_layer = id_123
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-128641469737920 | Setting saved to project: test_layer_name = RealName
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: test_layer = 1.0
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-128641469737920 | Project setting hit: test_layer_name = RealName
2026-01-15 13:32:36 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-128641469737920 | Restoring layer: test_layer -> RealName
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-128641469737920 | Point 1 added: 0.00, 0.00
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-128641469737920 | Point 2 added: 100.00, 100.00
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-128641469737920 | Point 1 added: 50.00, 50.00
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-128641469737920 | reset() called, finalized=False
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-128641469737920 | finalize_measurement called with 1 points
2026-01-15 13:32:37 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-128641469737920 | Cannot finalize measurement with less than 2 points
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-128641469737920 | finalize_measurement called with 2 points
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-128641469737920 | Setting finalized = True
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-128641469737920 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-128641469737920 | Switching to pan tool to stop measurement
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-128641469737920 | Pan tool activated - measurement should be frozen
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-128641469737920 | Ignoring click - measurement is finalized
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-128641469737920 | finalize_measurement called with 2 points
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-128641469737920 | Setting finalized = True
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-128641469737920 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-128641469737920 | Switching to pan tool to stop measurement
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-128641469737920 | Pan tool activated - measurement should be frozen
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-128641469737920 | reset() called, finalized=False
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-128641469737920 | reset() called, finalized=False
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-128641469737920 | reset() called, finalized=True
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-128641469737920 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-128641469737920 | reset() called, finalized=False
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-128641469737920 | finalize_measurement called with 2 points
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-128641469737920 | Setting finalized = True
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-128641469737920 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-128641469737920 | Rubber band redrawn with final points only
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-128641469737920 | Switching to pan tool to stop measurement
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-128641469737920 | Pan tool activated - measurement should be frozen
2026-01-15 13:32:37 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-128641469737920 | Failed to create locator for layer layer1: mock error
2026-01-15 13:32:37 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-128641469737920 | Failed to create locator for layer l2: fail
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-128641469737920 | ProfileMeasureTool activated
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-128641469737920 | reset() called, finalized=False
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-128641469737920 | ProfileMeasureTool deactivated
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-128641469737920 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-128641469737920 | Adding 1 drillhole trace features to layer
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-128641469737920 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-128641469737920 | Adding 1 drillhole trace features to layer
2026-01-15 13:32:37 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-128641469737920 | Failed to create memory layer: Fail
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-128641469737920 | create_drillhole_trace_layer called with 0 holes
2026-01-15 13:32:37 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-128641469737920 | No drillhole data provided for trace layer
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-128641469737920 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-128641469737920 | Skipping hole H1: insufficient trace points (1)
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-128641469737920 | Adding 0 drillhole trace features to layer
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-128641469737920 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128641469737920 | render() called
2026-01-15 13:32:37 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-128641469737920 | No valid layers to render
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128641469737920 | render() called
2026-01-15 13:32:37 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-128641469737920 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128641469737920 | render() called
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128641469737920 | render() called
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128641469737920 | render() called
2026-01-15 13:32:37 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-128641469737920 | No valid layers to render
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128641469737920 | render() called
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128641469737920 | render() called
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-128641469737920 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-128641469737920 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128641469737920 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-128641469737920 | ProfileController initialized
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-128641469737920 | Loaded 0 interpretations from project
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dem_band = 1
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: scale = 50000.0
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dh_use_geom = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: show_topo = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: show_geol = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: show_struct = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: show_drillholes = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: show_interpretations = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: auto_lod = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: max_points = 10000
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-128641469737920 | Settings loaded successfully from Project/Global config
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-128641469737920 | Saved 1 interpretations to project
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128641469737920 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-128641469737920 | ProfileController initialized
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-128641469737920 | Loaded 0 interpretations from project
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dem_band = 1
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: scale = 50000.0
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dh_use_geom = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: show_topo = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: show_geol = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: show_struct = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: show_drillholes = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: show_interpretations = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: auto_lod = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: max_points = 10000
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-128641469737920 | Settings loaded successfully from Project/Global config
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-128641469737920 | Saved 1 interpretations to project
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-128641469737920 | Saved 0 interpretations to project
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128641469737920 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-128641469737920 | ProfileController initialized
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-128641469737920 | Loaded 0 interpretations from project
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dem_band = 1
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: scale = 50000.0
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dh_use_geom = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: show_topo = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: show_geol = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: show_struct = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: show_drillholes = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: show_interpretations = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: auto_lod = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: max_points = 10000
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-128641469737920 | Settings loaded successfully from Project/Global config
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-128641469737920 | Loaded 1 interpretations from project
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-128641469737920 | Point 1 added: 0.00, 0.00
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-128641469737920 | Point 2 added: 10.00, 10.00
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-128641469737920 | finalize_measurement called with 2 points
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-128641469737920 | Setting finalized = True
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-128641469737920 | Measurement finalized: 2 points, 14.14m total distance
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-128641469737920 | Rubber band redrawn with final points only
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-128641469737920 | Switching to pan tool to stop measurement
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-128641469737920 | Pan tool activated - measurement should be frozen
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-128641469737920 | reset() called, finalized=True
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-128641469737920 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-128641469737920 | Point 1 added: 0.00, 0.00
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-128641469737920 | Point 2 added: 100.00, 100.00
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128641469737920 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-128641469737920 | ProfileController initialized
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-128641469737920 | Loaded 1 interpretations from project
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dem_band = 1
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: scale = 50000.0
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: dh_use_geom = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: show_topo = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: show_geol = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: show_struct = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: show_drillholes = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: show_interpretations = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: auto_lod = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:32:37 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128641469737920 | Global setting fallback: max_points = 10000
2026-01-15 13:32:37 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-128641469737920 | Settings loaded successfully from Project/Global config
2026-01-15 13:34:28 | DEBUG    | SecInterp | setup_logging:142 | Thread-123510077582272 | Logging system initialized. Root Level: 10
2026-01-15 13:34:28 | DEBUG    | SecInterp | setup_logging:143 | Thread-123510077582272 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 13:34:28 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-123510077582272 | Successfully exported to /tmp/test_dynamic.shp
2026-01-15 13:35:12 | DEBUG    | SecInterp | setup_logging:142 | Thread-130496721681344 | Logging system initialized. Root Level: 10
2026-01-15 13:35:12 | DEBUG    | SecInterp | setup_logging:143 | Thread-130496721681344 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 13:35:12 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-130496721681344 | Configuration reset to defaults initiated
2026-01-15 13:35:12 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130496721681344 | Config set: SecInterp/scale = 50000.0
2026-01-15 13:35:12 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130496721681344 | Config set: SecInterp/vert_exag = 1.0
2026-01-15 13:35:12 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130496721681344 | Config set: SecInterp/buffer_dist = 100.0
2026-01-15 13:35:12 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130496721681344 | Config set: SecInterp/show_topo = True
2026-01-15 13:35:12 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130496721681344 | Config set: SecInterp/show_geol = True
2026-01-15 13:35:12 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130496721681344 | Config set: SecInterp/show_struct = True
2026-01-15 13:35:12 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130496721681344 | Config set: SecInterp/show_drillholes = True
2026-01-15 13:35:12 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130496721681344 | Config set: SecInterp/show_interpretations = True
2026-01-15 13:35:12 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130496721681344 | Config set: SecInterp/interp_inherit_geol = True
2026-01-15 13:35:12 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130496721681344 | Config set: SecInterp/interp_inherit_drill = True
2026-01-15 13:35:12 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130496721681344 | Config set: SecInterp/dh_use_geom = True
2026-01-15 13:35:12 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130496721681344 | Config set: SecInterp/auto_lod = False
2026-01-15 13:35:12 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130496721681344 | Config set: SecInterp/adaptive_sampling = True
2026-01-15 13:35:12 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130496721681344 | Config set: SecInterp/max_points = 10000
2026-01-15 13:35:12 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130496721681344 | Config set: SecInterp/dem_band = 1
2026-01-15 13:35:12 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130496721681344 | Config set: SecInterp/scale = 200.0
2026-01-15 13:35:12 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130496721681344 | Config set: SecInterp/scale = 20000.0
2026-01-15 13:35:12 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130496721681344 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:35:12 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130496721681344 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:35:12 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130496721681344 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:35:12 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-130496721681344 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:35:12 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-130496721681344 | No collars found within buffer area.
2026-01-15 13:35:12 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-130496721681344 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:35:12 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-130496721681344 | DrillholeService.project_collars END: Found 1 collars.
2026-01-15 13:35:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-130496721681344 | ✓ Saving profile axes...
2026-01-15 13:35:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-130496721681344 | ✓ Saving topographic profile...
2026-01-15 13:35:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-130496721681344 | ✓ Saving profile axes...
2026-01-15 13:35:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-130496721681344 | ✓ Saving interpretation data...
2026-01-15 13:35:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-130496721681344 | 3D Export features are restricted for this user.
2026-01-15 13:35:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-130496721681344 | ✓ Saving topographic profile...
2026-01-15 13:35:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-130496721681344 | ✓ Saving profile axes...
2026-01-15 13:35:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-130496721681344 | ✓ Saving interpretation data...
2026-01-15 13:35:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-130496721681344 | ✓ Saving 3D interpretation data...
2026-01-15 13:35:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-130496721681344 | ✓ Saving topographic profile...
2026-01-15 13:35:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-130496721681344 | ✓ Saving profile axes...
2026-01-15 13:35:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-130496721681344 | ✓ Saving geological profile...
2026-01-15 13:35:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-130496721681344 | ✓ Saving structural profile...
2026-01-15 13:35:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-130496721681344 | ✓ Saving drillhole data...
2026-01-15 13:35:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-130496721681344 | ✓ Saving interpretation data...
2026-01-15 13:35:12 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-130496721681344 | Access denied for restricted feature: 3D Export
2026-01-15 13:35:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-130496721681344 | 3D Export features are restricted for this user.
2026-01-15 13:35:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-130496721681344 | ✓ Saving topographic profile...
2026-01-15 13:35:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-130496721681344 | ✓ Saving profile axes...
2026-01-15 13:35:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-130496721681344 | No interpretations provided for export.
2026-01-15 13:35:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-130496721681344 | ✓ Saving drillhole data...
2026-01-15 13:35:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-130496721681344 | ✓ Saving geological profile...
2026-01-15 13:35:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-130496721681344 | ✓ Saving interpretation data...
2026-01-15 13:35:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-130496721681344 | ✓ Saving 3D interpretation data...
2026-01-15 13:35:12 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-130496721681344 | Invalid section line layer, skipping 3D export.
2026-01-15 13:35:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-130496721681344 | ✓ Saving interpretation data...
2026-01-15 13:35:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-130496721681344 | ✓ Saving structural profile...
2026-01-15 13:35:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-130496721681344 | ✓ Saving topographic profile...
2026-01-15 13:35:12 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-130496721681344 | Generating master profile with interval=10.00
2026-01-15 13:35:12 | INFO     | SecInterp.performance | measure_operation:244 | Thread-130496721681344 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0035, 'memory_mb': 0.0, 'memory_peak_mb': 0.13, 'timestamp': '2026-01-15 13:35:12', 'args_count': 5, 'kwargs_keys': []}
2026-01-15 13:35:12 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-130496721681344 | Generating master profile with interval=50.00
2026-01-15 13:35:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-130496721681344 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 13:35:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-130496721681344 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 13:35:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-130496721681344 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-15 13:35:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-130496721681344 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-15 13:35:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-130496721681344 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-15 13:35:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-130496721681344 | Running geometry operation: test
2026-01-15 13:35:12 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-130496721681344 | Generated 1 drillhole traces
2026-01-15 13:35:12 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-130496721681344 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:35:12 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-130496721681344 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-130496721681344 | Generated 1 drillhole traces
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-130496721681344 | Drillhole preview skipped: No Collar ID field selected.
2026-01-15 13:35:13 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-130496721681344 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:35:13 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-130496721681344 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:35:13 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-130496721681344 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:35:13 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-130496721681344 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:35:13 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-130496721681344 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-130496721681344 | Analyzing structures in Structure Layer with buffer 10m
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-130496721681344 | Processed 1 structural measurements from Structure Layer
2026-01-15 13:35:13 | ERROR    | SecInterp.sec_interp.exporters.interpretation_exporters | export:77 | Thread-130496721681344 | Failed to export interpretations to /tmp/test_dynamic.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 74, in export
    return self._write_to_file(layer, output_path)
           ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 135, in _write_to_file
    result, error_msg, _new_layer_id, _new_layer_path = (
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 4, got 0)
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-130496721681344 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-130496721681344 | Generated QML style: /tmp/test.qml
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-130496721681344 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-130496721681344 | Generated QML style: dummy.qml
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-130496721681344 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-130496721681344 | Generated QML style: dummy.qml
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-130496721681344 | Loaded 0 interpretations from project
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:369 | Thread-130496721681344 | Inherited attributes from geology: GeologyUnit
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-130496721681344 | Loaded 0 interpretations from project
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: section_layer = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: section_layer_name = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-130496721681344 | Failed to restore layer for section_layer
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: buffer_dist = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dem_layer = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dem_layer_name = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-130496721681344 | Failed to restore layer for dem_layer
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dem_band = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: scale = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: geol_layer = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: geol_layer_name = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-130496721681344 | Failed to restore layer for geol_layer
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: geol_field = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: struct_layer = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: struct_layer_name = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-130496721681344 | Failed to restore layer for struct_layer
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: struct_dip_field = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: struct_strike_field = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dh_collar_layer = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-130496721681344 | Failed to restore layer for dh_collar_layer
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dh_collar_id = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dh_use_geom = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dh_collar_x = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dh_collar_y = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dh_collar_z = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dh_collar_depth = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dh_survey_layer = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-130496721681344 | Failed to restore layer for dh_survey_layer
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dh_survey_id = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dh_survey_depth = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dh_survey_azim = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dh_survey_incl = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dh_interval_layer = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-130496721681344 | Failed to restore layer for dh_interval_layer
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dh_interval_id = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dh_interval_from = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dh_interval_to = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dh_interval_lith = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: last_output_dir = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: interp_custom_fields = 1.0
2026-01-15 13:35:13 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-130496721681344 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: show_topo = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: show_geol = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: show_struct = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: show_drillholes = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: show_interpretations = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: auto_lod = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: adaptive_sampling = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: max_points = 1.0
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-130496721681344 | Settings loaded successfully from Project/Global config
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:477 | Thread-130496721681344 | Cache cleared by user
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-130496721681344 | GeologyGenerationTask started (Background Thread)
2026-01-15 13:35:13 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-130496721681344 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-130496721681344 | GeologyGenerationTask started (Background Thread)
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-130496721681344 | GeologyGenerationTask finished with 1 segments
2026-01-15 13:35:13 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-130496721681344 | Test Title: Test Message
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-130496721681344 | Test Title: Test Message
2026-01-15 13:35:13 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-130496721681344 | Test Title: Test Message
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-130496721681344 | CRITICAL_OP: finalize_polygon | points=2
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-130496721681344 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-15 13:35:13 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-130496721681344 | finalize_polygon() aborted - less than 3 points
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-130496721681344 | CRITICAL_OP: finalize_polygon | points=3
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-130496721681344 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-130496721681344 | finalize_polygon() - emitting polygonFinished signal for 1340469c-db0a-476c-9ec9-2073751d1624
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-130496721681344 | Interpretation polygon finalized with 3 vertices, ID: 1340469c-db0a-476c-9ec9-2073751d1624
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-130496721681344 | finalize_polygon() completed
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-130496721681344 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-130496721681344 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-130496721681344 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-130496721681344 | ProfileInterpretationTool.reset() completed
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-130496721681344 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-130496721681344 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-130496721681344 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-130496721681344 | ProfileInterpretationTool.reset() completed
2026-01-15 13:35:13 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-130496721681344 | Failed to create locator for layer layer1: mock error
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-130496721681344 | ProfileInterpretationTool.activate() called
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: buffer_dist = 100.5
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-130496721681344 | Persistent interpretations cleared by reset
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-130496721681344 | Setting saved to project: test_layer = id_123
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-130496721681344 | Setting saved to project: test_layer_name = RealName
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: test_layer = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-130496721681344 | Project setting hit: test_layer_name = RealName
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-130496721681344 | Restoring layer: test_layer -> RealName
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-130496721681344 | Point 1 added: 0.00, 0.00
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-130496721681344 | Point 2 added: 100.00, 100.00
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-130496721681344 | Point 1 added: 50.00, 50.00
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-130496721681344 | reset() called, finalized=False
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-130496721681344 | finalize_measurement called with 1 points
2026-01-15 13:35:13 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-130496721681344 | Cannot finalize measurement with less than 2 points
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-130496721681344 | finalize_measurement called with 2 points
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-130496721681344 | Setting finalized = True
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-130496721681344 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-130496721681344 | Switching to pan tool to stop measurement
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-130496721681344 | Pan tool activated - measurement should be frozen
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-130496721681344 | Ignoring click - measurement is finalized
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-130496721681344 | finalize_measurement called with 2 points
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-130496721681344 | Setting finalized = True
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-130496721681344 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-130496721681344 | Switching to pan tool to stop measurement
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-130496721681344 | Pan tool activated - measurement should be frozen
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-130496721681344 | reset() called, finalized=False
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-130496721681344 | reset() called, finalized=False
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-130496721681344 | reset() called, finalized=True
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-130496721681344 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-130496721681344 | reset() called, finalized=False
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-130496721681344 | finalize_measurement called with 2 points
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-130496721681344 | Setting finalized = True
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-130496721681344 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-130496721681344 | Rubber band redrawn with final points only
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-130496721681344 | Switching to pan tool to stop measurement
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-130496721681344 | Pan tool activated - measurement should be frozen
2026-01-15 13:35:13 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-130496721681344 | Failed to create locator for layer layer1: mock error
2026-01-15 13:35:13 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-130496721681344 | Failed to create locator for layer l2: fail
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-130496721681344 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-130496721681344 | Adding 1 drillhole trace features to layer
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-130496721681344 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-130496721681344 | Adding 1 drillhole trace features to layer
2026-01-15 13:35:13 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-130496721681344 | Failed to create memory layer: Fail
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-130496721681344 | create_drillhole_trace_layer called with 0 holes
2026-01-15 13:35:13 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-130496721681344 | No drillhole data provided for trace layer
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-130496721681344 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-130496721681344 | Skipping hole H1: insufficient trace points (1)
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-130496721681344 | Adding 0 drillhole trace features to layer
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-130496721681344 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130496721681344 | render() called
2026-01-15 13:35:13 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-130496721681344 | No valid layers to render
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130496721681344 | render() called
2026-01-15 13:35:13 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-130496721681344 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130496721681344 | render() called
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130496721681344 | render() called
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130496721681344 | render() called
2026-01-15 13:35:13 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-130496721681344 | No valid layers to render
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130496721681344 | render() called
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130496721681344 | render() called
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-130496721681344 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-130496721681344 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130496721681344 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-130496721681344 | ProfileController initialized
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-130496721681344 | Loaded 0 interpretations from project
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dem_band = 1
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: scale = 50000.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dh_use_geom = True
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: show_topo = True
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: show_geol = True
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: show_struct = True
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: show_drillholes = True
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: show_interpretations = True
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: auto_lod = True
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: max_points = 10000
2026-01-15 13:35:13 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-130496721681344 | Settings loaded successfully from Project/Global config
2026-01-15 13:35:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-130496721681344 | Saved 1 interpretations to project
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130496721681344 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-130496721681344 | ProfileController initialized
2026-01-15 13:35:14 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-130496721681344 | Loaded 0 interpretations from project
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dem_band = 1
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: scale = 50000.0
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dh_use_geom = True
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: show_topo = True
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: show_geol = True
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: show_struct = True
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: show_drillholes = True
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: show_interpretations = True
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: auto_lod = True
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: max_points = 10000
2026-01-15 13:35:14 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-130496721681344 | Settings loaded successfully from Project/Global config
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-130496721681344 | Saved 1 interpretations to project
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-130496721681344 | Saved 0 interpretations to project
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130496721681344 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-130496721681344 | ProfileController initialized
2026-01-15 13:35:14 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-130496721681344 | Loaded 0 interpretations from project
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dem_band = 1
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: scale = 50000.0
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dh_use_geom = True
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: show_topo = True
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: show_geol = True
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: show_struct = True
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: show_drillholes = True
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: show_interpretations = True
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: auto_lod = True
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: max_points = 10000
2026-01-15 13:35:14 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-130496721681344 | Settings loaded successfully from Project/Global config
2026-01-15 13:35:14 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-130496721681344 | Loaded 1 interpretations from project
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-130496721681344 | Point 1 added: 0.00, 0.00
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-130496721681344 | Point 2 added: 10.00, 10.00
2026-01-15 13:35:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-130496721681344 | finalize_measurement called with 2 points
2026-01-15 13:35:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-130496721681344 | Setting finalized = True
2026-01-15 13:35:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-130496721681344 | Measurement finalized: 2 points, 14.14m total distance
2026-01-15 13:35:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-130496721681344 | Rubber band redrawn with final points only
2026-01-15 13:35:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-130496721681344 | Switching to pan tool to stop measurement
2026-01-15 13:35:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-130496721681344 | Pan tool activated - measurement should be frozen
2026-01-15 13:35:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-130496721681344 | reset() called, finalized=True
2026-01-15 13:35:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-130496721681344 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-130496721681344 | Point 1 added: 0.00, 0.00
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-130496721681344 | Point 2 added: 100.00, 100.00
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130496721681344 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-130496721681344 | ProfileController initialized
2026-01-15 13:35:14 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-130496721681344 | Loaded 1 interpretations from project
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dem_band = 1
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: scale = 50000.0
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: dh_use_geom = True
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: show_topo = True
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: show_geol = True
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: show_struct = True
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: show_drillholes = True
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: show_interpretations = True
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: auto_lod = True
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:35:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-130496721681344 | Global setting fallback: max_points = 10000
2026-01-15 13:35:14 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-130496721681344 | Settings loaded successfully from Project/Global config
2026-01-15 13:35:32 | DEBUG    | SecInterp | setup_logging:142 | Thread-123581207067584 | Logging system initialized. Root Level: 10
2026-01-15 13:35:32 | DEBUG    | SecInterp | setup_logging:143 | Thread-123581207067584 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-123581207067584 | Configuration reset to defaults initiated
2026-01-15 13:35:32 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123581207067584 | Config set: SecInterp/scale = 50000.0
2026-01-15 13:35:32 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123581207067584 | Config set: SecInterp/vert_exag = 1.0
2026-01-15 13:35:32 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123581207067584 | Config set: SecInterp/buffer_dist = 100.0
2026-01-15 13:35:32 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123581207067584 | Config set: SecInterp/show_topo = True
2026-01-15 13:35:32 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123581207067584 | Config set: SecInterp/show_geol = True
2026-01-15 13:35:32 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123581207067584 | Config set: SecInterp/show_struct = True
2026-01-15 13:35:32 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123581207067584 | Config set: SecInterp/show_drillholes = True
2026-01-15 13:35:32 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123581207067584 | Config set: SecInterp/show_interpretations = True
2026-01-15 13:35:32 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123581207067584 | Config set: SecInterp/interp_inherit_geol = True
2026-01-15 13:35:32 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123581207067584 | Config set: SecInterp/interp_inherit_drill = True
2026-01-15 13:35:32 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123581207067584 | Config set: SecInterp/dh_use_geom = True
2026-01-15 13:35:32 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123581207067584 | Config set: SecInterp/auto_lod = False
2026-01-15 13:35:32 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123581207067584 | Config set: SecInterp/adaptive_sampling = True
2026-01-15 13:35:32 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123581207067584 | Config set: SecInterp/max_points = 10000
2026-01-15 13:35:32 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123581207067584 | Config set: SecInterp/dem_band = 1
2026-01-15 13:35:32 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123581207067584 | Config set: SecInterp/scale = 200.0
2026-01-15 13:35:32 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123581207067584 | Config set: SecInterp/scale = 20000.0
2026-01-15 13:35:32 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123581207067584 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:35:32 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123581207067584 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:35:32 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123581207067584 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-123581207067584 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-123581207067584 | No collars found within buffer area.
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-123581207067584 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-123581207067584 | DrillholeService.project_collars END: Found 1 collars.
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-123581207067584 | ✓ Saving profile axes...
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-123581207067584 | ✓ Saving topographic profile...
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-123581207067584 | ✓ Saving profile axes...
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-123581207067584 | ✓ Saving interpretation data...
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-123581207067584 | 3D Export features are restricted for this user.
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-123581207067584 | ✓ Saving topographic profile...
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-123581207067584 | ✓ Saving profile axes...
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-123581207067584 | ✓ Saving interpretation data...
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-123581207067584 | ✓ Saving 3D interpretation data...
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-123581207067584 | ✓ Saving topographic profile...
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-123581207067584 | ✓ Saving profile axes...
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-123581207067584 | ✓ Saving geological profile...
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-123581207067584 | ✓ Saving structural profile...
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-123581207067584 | ✓ Saving drillhole data...
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-123581207067584 | ✓ Saving interpretation data...
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-123581207067584 | Access denied for restricted feature: 3D Export
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-123581207067584 | 3D Export features are restricted for this user.
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-123581207067584 | ✓ Saving topographic profile...
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-123581207067584 | ✓ Saving profile axes...
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-123581207067584 | No interpretations provided for export.
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-123581207067584 | ✓ Saving drillhole data...
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-123581207067584 | ✓ Saving geological profile...
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-123581207067584 | ✓ Saving interpretation data...
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-123581207067584 | ✓ Saving 3D interpretation data...
2026-01-15 13:35:32 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-123581207067584 | Invalid section line layer, skipping 3D export.
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-123581207067584 | ✓ Saving interpretation data...
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-123581207067584 | ✓ Saving structural profile...
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-123581207067584 | ✓ Saving topographic profile...
2026-01-15 13:35:32 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-123581207067584 | Generating master profile with interval=10.00
2026-01-15 13:35:32 | INFO     | SecInterp.performance | measure_operation:244 | Thread-123581207067584 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0029, 'memory_mb': 0.0, 'memory_peak_mb': 0.13, 'timestamp': '2026-01-15 13:35:32', 'args_count': 5, 'kwargs_keys': []}
2026-01-15 13:35:32 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-123581207067584 | Generating master profile with interval=50.00
2026-01-15 13:35:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-123581207067584 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 13:35:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-123581207067584 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 13:35:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-123581207067584 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-15 13:35:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-123581207067584 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-15 13:35:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-123581207067584 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-15 13:35:32 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-123581207067584 | Running geometry operation: test
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-123581207067584 | Generated 1 drillhole traces
2026-01-15 13:35:32 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-123581207067584 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:35:32 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-123581207067584 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:35:32 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-123581207067584 | Generated 1 drillhole traces
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-123581207067584 | Drillhole preview skipped: No Collar ID field selected.
2026-01-15 13:35:33 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-123581207067584 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:35:33 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-123581207067584 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:35:33 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-123581207067584 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:35:33 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-123581207067584 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:35:33 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-123581207067584 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-123581207067584 | Analyzing structures in Structure Layer with buffer 10m
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-123581207067584 | Processed 1 structural measurements from Structure Layer
2026-01-15 13:35:33 | ERROR    | SecInterp.sec_interp.exporters.interpretation_exporters | export:77 | Thread-123581207067584 | Failed to export interpretations to /tmp/test_dynamic.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 74, in export
    return self._write_to_file(layer, output_path)
           ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 135, in _write_to_file
    result, error_msg, _new_layer_id, _new_layer_path = (
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 4, got 0)
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-123581207067584 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-123581207067584 | Generated QML style: /tmp/test.qml
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-123581207067584 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-123581207067584 | Generated QML style: dummy.qml
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-123581207067584 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-123581207067584 | Generated QML style: dummy.qml
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-123581207067584 | Loaded 0 interpretations from project
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:369 | Thread-123581207067584 | Inherited attributes from geology: GeologyUnit
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-123581207067584 | Loaded 0 interpretations from project
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: section_layer = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: section_layer_name = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-123581207067584 | Failed to restore layer for section_layer
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: buffer_dist = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dem_layer = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dem_layer_name = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-123581207067584 | Failed to restore layer for dem_layer
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dem_band = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: scale = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: geol_layer = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: geol_layer_name = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-123581207067584 | Failed to restore layer for geol_layer
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: geol_field = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: struct_layer = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: struct_layer_name = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-123581207067584 | Failed to restore layer for struct_layer
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: struct_dip_field = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: struct_strike_field = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dh_collar_layer = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-123581207067584 | Failed to restore layer for dh_collar_layer
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dh_collar_id = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dh_use_geom = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dh_collar_x = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dh_collar_y = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dh_collar_z = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dh_collar_depth = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dh_survey_layer = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-123581207067584 | Failed to restore layer for dh_survey_layer
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dh_survey_id = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dh_survey_depth = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dh_survey_azim = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dh_survey_incl = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dh_interval_layer = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-123581207067584 | Failed to restore layer for dh_interval_layer
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dh_interval_id = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dh_interval_from = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dh_interval_to = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dh_interval_lith = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: last_output_dir = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: interp_custom_fields = 1.0
2026-01-15 13:35:33 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-123581207067584 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: show_topo = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: show_geol = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: show_struct = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: show_drillholes = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: show_interpretations = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: auto_lod = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: adaptive_sampling = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: max_points = 1.0
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-123581207067584 | Settings loaded successfully from Project/Global config
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:477 | Thread-123581207067584 | Cache cleared by user
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-123581207067584 | GeologyGenerationTask started (Background Thread)
2026-01-15 13:35:33 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-123581207067584 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-123581207067584 | GeologyGenerationTask started (Background Thread)
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-123581207067584 | GeologyGenerationTask finished with 1 segments
2026-01-15 13:35:33 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-123581207067584 | Test Title: Test Message
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-123581207067584 | Test Title: Test Message
2026-01-15 13:35:33 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-123581207067584 | Test Title: Test Message
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-123581207067584 | CRITICAL_OP: finalize_polygon | points=2
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-123581207067584 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-15 13:35:33 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-123581207067584 | finalize_polygon() aborted - less than 3 points
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-123581207067584 | CRITICAL_OP: finalize_polygon | points=3
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-123581207067584 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-123581207067584 | finalize_polygon() - emitting polygonFinished signal for 649dc797-ced7-4586-a801-87933490fd52
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-123581207067584 | Interpretation polygon finalized with 3 vertices, ID: 649dc797-ced7-4586-a801-87933490fd52
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-123581207067584 | finalize_polygon() completed
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-123581207067584 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-123581207067584 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-123581207067584 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-123581207067584 | ProfileInterpretationTool.reset() completed
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-123581207067584 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-123581207067584 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-123581207067584 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-123581207067584 | ProfileInterpretationTool.reset() completed
2026-01-15 13:35:33 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-123581207067584 | Failed to create locator for layer layer1: mock error
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-123581207067584 | ProfileInterpretationTool.activate() called
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-123581207067584 | ProfileInterpretationTool activated successfully
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-123581207067584 | ProfileInterpretationTool.deactivate() called
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-123581207067584 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-123581207067584 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-123581207067584 | ProfileInterpretationTool.reset() completed
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-123581207067584 | ProfileInterpretationTool deactivated successfully
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: buffer_dist = 100.5
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-123581207067584 | Persistent interpretations cleared by reset
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-123581207067584 | Setting saved to project: test_layer = id_123
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-123581207067584 | Setting saved to project: test_layer_name = RealName
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: test_layer = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-123581207067584 | Project setting hit: test_layer_name = RealName
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-123581207067584 | Restoring layer: test_layer -> RealName
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-123581207067584 | Point 1 added: 0.00, 0.00
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-123581207067584 | Point 2 added: 100.00, 100.00
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-123581207067584 | Point 1 added: 50.00, 50.00
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-123581207067584 | reset() called, finalized=False
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-123581207067584 | finalize_measurement called with 1 points
2026-01-15 13:35:33 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-123581207067584 | Cannot finalize measurement with less than 2 points
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-123581207067584 | finalize_measurement called with 2 points
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-123581207067584 | Setting finalized = True
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-123581207067584 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-123581207067584 | Switching to pan tool to stop measurement
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-123581207067584 | Pan tool activated - measurement should be frozen
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-123581207067584 | Ignoring click - measurement is finalized
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-123581207067584 | finalize_measurement called with 2 points
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-123581207067584 | Setting finalized = True
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-123581207067584 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-123581207067584 | Switching to pan tool to stop measurement
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-123581207067584 | Pan tool activated - measurement should be frozen
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-123581207067584 | reset() called, finalized=False
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-123581207067584 | reset() called, finalized=False
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-123581207067584 | reset() called, finalized=True
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-123581207067584 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-123581207067584 | reset() called, finalized=False
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-123581207067584 | finalize_measurement called with 2 points
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-123581207067584 | Setting finalized = True
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-123581207067584 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-123581207067584 | Rubber band redrawn with final points only
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-123581207067584 | Switching to pan tool to stop measurement
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-123581207067584 | Pan tool activated - measurement should be frozen
2026-01-15 13:35:33 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-123581207067584 | Failed to create locator for layer layer1: mock error
2026-01-15 13:35:33 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-123581207067584 | Failed to create locator for layer l2: fail
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-123581207067584 | ProfileMeasureTool activated
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-123581207067584 | reset() called, finalized=False
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-123581207067584 | ProfileMeasureTool deactivated
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-123581207067584 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-123581207067584 | Adding 1 drillhole trace features to layer
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-123581207067584 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-123581207067584 | Adding 1 drillhole trace features to layer
2026-01-15 13:35:33 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-123581207067584 | Failed to create memory layer: Fail
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-123581207067584 | create_drillhole_trace_layer called with 0 holes
2026-01-15 13:35:33 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-123581207067584 | No drillhole data provided for trace layer
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-123581207067584 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-123581207067584 | Skipping hole H1: insufficient trace points (1)
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-123581207067584 | Adding 0 drillhole trace features to layer
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-123581207067584 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123581207067584 | render() called
2026-01-15 13:35:33 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-123581207067584 | No valid layers to render
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123581207067584 | render() called
2026-01-15 13:35:33 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-123581207067584 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123581207067584 | render() called
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123581207067584 | render() called
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123581207067584 | render() called
2026-01-15 13:35:33 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-123581207067584 | No valid layers to render
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123581207067584 | render() called
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123581207067584 | render() called
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-123581207067584 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-123581207067584 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123581207067584 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-123581207067584 | ProfileController initialized
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-123581207067584 | Loaded 0 interpretations from project
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dem_band = 1
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: scale = 50000.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dh_use_geom = True
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: show_topo = True
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: show_geol = True
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: show_struct = True
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: show_drillholes = True
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: show_interpretations = True
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: auto_lod = True
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: max_points = 10000
2026-01-15 13:35:33 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-123581207067584 | Settings loaded successfully from Project/Global config
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-123581207067584 | Saved 1 interpretations to project
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123581207067584 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:35:33 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-123581207067584 | ProfileController initialized
2026-01-15 13:35:34 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-123581207067584 | Loaded 0 interpretations from project
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dem_band = 1
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: scale = 50000.0
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dh_use_geom = True
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: show_topo = True
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: show_geol = True
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: show_struct = True
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: show_drillholes = True
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: show_interpretations = True
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: auto_lod = True
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: max_points = 10000
2026-01-15 13:35:34 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-123581207067584 | Settings loaded successfully from Project/Global config
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-123581207067584 | Saved 1 interpretations to project
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-123581207067584 | Saved 0 interpretations to project
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123581207067584 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-123581207067584 | ProfileController initialized
2026-01-15 13:35:34 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-123581207067584 | Loaded 0 interpretations from project
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dem_band = 1
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: scale = 50000.0
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dh_use_geom = True
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: show_topo = True
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: show_geol = True
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: show_struct = True
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: show_drillholes = True
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: show_interpretations = True
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: auto_lod = True
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: max_points = 10000
2026-01-15 13:35:34 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-123581207067584 | Settings loaded successfully from Project/Global config
2026-01-15 13:35:34 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-123581207067584 | Loaded 1 interpretations from project
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-123581207067584 | Point 1 added: 0.00, 0.00
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-123581207067584 | Point 2 added: 10.00, 10.00
2026-01-15 13:35:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-123581207067584 | finalize_measurement called with 2 points
2026-01-15 13:35:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-123581207067584 | Setting finalized = True
2026-01-15 13:35:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-123581207067584 | Measurement finalized: 2 points, 14.14m total distance
2026-01-15 13:35:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-123581207067584 | Rubber band redrawn with final points only
2026-01-15 13:35:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-123581207067584 | Switching to pan tool to stop measurement
2026-01-15 13:35:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-123581207067584 | Pan tool activated - measurement should be frozen
2026-01-15 13:35:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-123581207067584 | reset() called, finalized=True
2026-01-15 13:35:34 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-123581207067584 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-123581207067584 | Point 1 added: 0.00, 0.00
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-123581207067584 | Point 2 added: 100.00, 100.00
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123581207067584 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-123581207067584 | ProfileController initialized
2026-01-15 13:35:34 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-123581207067584 | Loaded 1 interpretations from project
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dem_band = 1
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: scale = 50000.0
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: dh_use_geom = True
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: show_topo = True
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: show_geol = True
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: show_struct = True
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: show_drillholes = True
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: show_interpretations = True
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: auto_lod = True
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:35:34 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123581207067584 | Global setting fallback: max_points = 10000
2026-01-15 13:35:34 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-123581207067584 | Settings loaded successfully from Project/Global config
2026-01-15 13:36:38 | DEBUG    | SecInterp | setup_logging:142 | Thread-137714560969664 | Logging system initialized. Root Level: 10
2026-01-15 13:36:38 | DEBUG    | SecInterp | setup_logging:143 | Thread-137714560969664 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-137714560969664 | Configuration reset to defaults initiated
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137714560969664 | Config set: SecInterp/scale = 50000.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137714560969664 | Config set: SecInterp/vert_exag = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137714560969664 | Config set: SecInterp/buffer_dist = 100.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137714560969664 | Config set: SecInterp/show_topo = True
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137714560969664 | Config set: SecInterp/show_geol = True
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137714560969664 | Config set: SecInterp/show_struct = True
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137714560969664 | Config set: SecInterp/show_drillholes = True
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137714560969664 | Config set: SecInterp/show_interpretations = True
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137714560969664 | Config set: SecInterp/interp_inherit_geol = True
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137714560969664 | Config set: SecInterp/interp_inherit_drill = True
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137714560969664 | Config set: SecInterp/dh_use_geom = True
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137714560969664 | Config set: SecInterp/auto_lod = False
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137714560969664 | Config set: SecInterp/adaptive_sampling = True
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137714560969664 | Config set: SecInterp/max_points = 10000
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137714560969664 | Config set: SecInterp/dem_band = 1
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137714560969664 | Config set: SecInterp/scale = 200.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137714560969664 | Config set: SecInterp/scale = 20000.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-137714560969664 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-137714560969664 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-137714560969664 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-137714560969664 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-137714560969664 | No collars found within buffer area.
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-137714560969664 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-137714560969664 | DrillholeService.project_collars END: Found 1 collars.
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-137714560969664 | ✓ Saving profile axes...
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-137714560969664 | ✓ Saving topographic profile...
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-137714560969664 | ✓ Saving profile axes...
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-137714560969664 | ✓ Saving interpretation data...
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-137714560969664 | 3D Export features are restricted for this user.
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-137714560969664 | ✓ Saving topographic profile...
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-137714560969664 | ✓ Saving profile axes...
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-137714560969664 | ✓ Saving interpretation data...
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-137714560969664 | ✓ Saving 3D interpretation data...
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-137714560969664 | ✓ Saving topographic profile...
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-137714560969664 | ✓ Saving profile axes...
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-137714560969664 | ✓ Saving geological profile...
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-137714560969664 | ✓ Saving structural profile...
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-137714560969664 | ✓ Saving drillhole data...
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-137714560969664 | ✓ Saving interpretation data...
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-137714560969664 | Access denied for restricted feature: 3D Export
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-137714560969664 | 3D Export features are restricted for this user.
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-137714560969664 | ✓ Saving topographic profile...
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-137714560969664 | ✓ Saving profile axes...
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-137714560969664 | No interpretations provided for export.
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-137714560969664 | ✓ Saving drillhole data...
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-137714560969664 | ✓ Saving geological profile...
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-137714560969664 | ✓ Saving interpretation data...
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-137714560969664 | ✓ Saving 3D interpretation data...
2026-01-15 13:36:38 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-137714560969664 | Invalid section line layer, skipping 3D export.
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-137714560969664 | ✓ Saving interpretation data...
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-137714560969664 | ✓ Saving structural profile...
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-137714560969664 | ✓ Saving topographic profile...
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-137714560969664 | Generating master profile with interval=10.00
2026-01-15 13:36:38 | INFO     | SecInterp.performance | measure_operation:244 | Thread-137714560969664 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0033, 'memory_mb': 0.0, 'memory_peak_mb': 0.13, 'timestamp': '2026-01-15 13:36:38', 'args_count': 5, 'kwargs_keys': []}
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-137714560969664 | Generating master profile with interval=50.00
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-137714560969664 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-137714560969664 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-137714560969664 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-137714560969664 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-137714560969664 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-137714560969664 | Running geometry operation: test
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-137714560969664 | Generated 1 drillhole traces
2026-01-15 13:36:38 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-137714560969664 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:36:38 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-137714560969664 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-137714560969664 | Generated 1 drillhole traces
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-137714560969664 | Drillhole preview skipped: No Collar ID field selected.
2026-01-15 13:36:38 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-137714560969664 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:36:38 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-137714560969664 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:36:38 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-137714560969664 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:36:38 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-137714560969664 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:36:38 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-137714560969664 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-137714560969664 | Analyzing structures in Structure Layer with buffer 10m
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-137714560969664 | Processed 1 structural measurements from Structure Layer
2026-01-15 13:36:38 | ERROR    | SecInterp.sec_interp.exporters.interpretation_exporters | export:77 | Thread-137714560969664 | Failed to export interpretations to /tmp/test_dynamic.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 74, in export
    return self._write_to_file(layer, output_path)
           ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/interpretation_exporters.py", line 135, in _write_to_file
    result, error_msg, _new_layer_id, _new_layer_path = (
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 4, got 0)
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-137714560969664 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-137714560969664 | Generated QML style: /tmp/test.qml
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-137714560969664 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-137714560969664 | Generated QML style: dummy.qml
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-137714560969664 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-137714560969664 | Generated QML style: dummy.qml
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-137714560969664 | Loaded 0 interpretations from project
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:369 | Thread-137714560969664 | Inherited attributes from geology: GeologyUnit
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-137714560969664 | Loaded 0 interpretations from project
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: section_layer = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: section_layer_name = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-137714560969664 | Failed to restore layer for section_layer
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: buffer_dist = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dem_layer = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dem_layer_name = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-137714560969664 | Failed to restore layer for dem_layer
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dem_band = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: scale = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: geol_layer = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: geol_layer_name = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-137714560969664 | Failed to restore layer for geol_layer
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: geol_field = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: struct_layer = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: struct_layer_name = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-137714560969664 | Failed to restore layer for struct_layer
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: struct_dip_field = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: struct_strike_field = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dh_collar_layer = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-137714560969664 | Failed to restore layer for dh_collar_layer
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dh_collar_id = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dh_use_geom = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dh_collar_x = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dh_collar_y = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dh_collar_z = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dh_collar_depth = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dh_survey_layer = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-137714560969664 | Failed to restore layer for dh_survey_layer
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dh_survey_id = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dh_survey_depth = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dh_survey_azim = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dh_survey_incl = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dh_interval_layer = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-137714560969664 | Failed to restore layer for dh_interval_layer
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dh_interval_id = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dh_interval_from = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dh_interval_to = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dh_interval_lith = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: last_output_dir = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: interp_custom_fields = 1.0
2026-01-15 13:36:38 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-137714560969664 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: show_topo = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: show_geol = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: show_struct = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: show_drillholes = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: show_interpretations = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: auto_lod = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: adaptive_sampling = 1.0
2026-01-15 13:36:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: max_points = 1.0
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-137714560969664 | Settings loaded successfully from Project/Global config
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:477 | Thread-137714560969664 | Cache cleared by user
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-137714560969664 | GeologyGenerationTask started (Background Thread)
2026-01-15 13:36:38 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-137714560969664 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-137714560969664 | GeologyGenerationTask started (Background Thread)
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-137714560969664 | GeologyGenerationTask finished with 1 segments
2026-01-15 13:36:38 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-137714560969664 | Test Title: Test Message
2026-01-15 13:36:38 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-137714560969664 | Test Title: Test Message
2026-01-15 13:36:38 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-137714560969664 | Test Title: Test Message
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-137714560969664 | CRITICAL_OP: finalize_polygon | points=2
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-137714560969664 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-15 13:36:39 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-137714560969664 | finalize_polygon() aborted - less than 3 points
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-137714560969664 | CRITICAL_OP: finalize_polygon | points=3
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-137714560969664 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-137714560969664 | finalize_polygon() - emitting polygonFinished signal for 77aaf95d-1a69-4e89-9d12-e61e044ce9ad
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-137714560969664 | Interpretation polygon finalized with 3 vertices, ID: 77aaf95d-1a69-4e89-9d12-e61e044ce9ad
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-137714560969664 | finalize_polygon() completed
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-137714560969664 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-137714560969664 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-137714560969664 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-137714560969664 | ProfileInterpretationTool.reset() completed
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-137714560969664 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-137714560969664 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-137714560969664 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-137714560969664 | ProfileInterpretationTool.reset() completed
2026-01-15 13:36:39 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-137714560969664 | Failed to create locator for layer layer1: mock error
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-137714560969664 | ProfileInterpretationTool.activate() called
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-137714560969664 | ProfileInterpretationTool activated successfully
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-137714560969664 | ProfileInterpretationTool.deactivate() called
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-137714560969664 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-137714560969664 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-137714560969664 | ProfileInterpretationTool.reset() completed
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-137714560969664 | ProfileInterpretationTool deactivated successfully
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: buffer_dist = 100.5
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-137714560969664 | Persistent interpretations cleared by reset
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-137714560969664 | Setting saved to project: test_layer = id_123
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-137714560969664 | Setting saved to project: test_layer_name = RealName
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: test_layer = 1.0
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137714560969664 | Project setting hit: test_layer_name = RealName
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-137714560969664 | Restoring layer: test_layer -> RealName
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-137714560969664 | Point 1 added: 0.00, 0.00
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-137714560969664 | Point 2 added: 100.00, 100.00
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-137714560969664 | Point 1 added: 50.00, 50.00
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-137714560969664 | reset() called, finalized=False
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-137714560969664 | finalize_measurement called with 1 points
2026-01-15 13:36:39 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-137714560969664 | Cannot finalize measurement with less than 2 points
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-137714560969664 | finalize_measurement called with 2 points
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-137714560969664 | Setting finalized = True
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-137714560969664 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-137714560969664 | Switching to pan tool to stop measurement
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-137714560969664 | Pan tool activated - measurement should be frozen
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-137714560969664 | Ignoring click - measurement is finalized
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-137714560969664 | finalize_measurement called with 2 points
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-137714560969664 | Setting finalized = True
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-137714560969664 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-137714560969664 | Switching to pan tool to stop measurement
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-137714560969664 | Pan tool activated - measurement should be frozen
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-137714560969664 | reset() called, finalized=False
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-137714560969664 | reset() called, finalized=False
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-137714560969664 | reset() called, finalized=True
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-137714560969664 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-137714560969664 | reset() called, finalized=False
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-137714560969664 | finalize_measurement called with 2 points
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-137714560969664 | Setting finalized = True
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-137714560969664 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-137714560969664 | Rubber band redrawn with final points only
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-137714560969664 | Switching to pan tool to stop measurement
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-137714560969664 | Pan tool activated - measurement should be frozen
2026-01-15 13:36:39 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-137714560969664 | Failed to create locator for layer layer1: mock error
2026-01-15 13:36:39 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-137714560969664 | Failed to create locator for layer l2: fail
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-137714560969664 | ProfileMeasureTool activated
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-137714560969664 | reset() called, finalized=False
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-137714560969664 | ProfileMeasureTool deactivated
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-137714560969664 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-137714560969664 | Adding 1 drillhole trace features to layer
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-137714560969664 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-137714560969664 | Adding 1 drillhole trace features to layer
2026-01-15 13:36:39 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-137714560969664 | Failed to create memory layer: Fail
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-137714560969664 | create_drillhole_trace_layer called with 0 holes
2026-01-15 13:36:39 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-137714560969664 | No drillhole data provided for trace layer
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-137714560969664 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-137714560969664 | Skipping hole H1: insufficient trace points (1)
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-137714560969664 | Adding 0 drillhole trace features to layer
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-137714560969664 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137714560969664 | render() called
2026-01-15 13:36:39 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-137714560969664 | No valid layers to render
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137714560969664 | render() called
2026-01-15 13:36:39 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-137714560969664 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137714560969664 | render() called
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137714560969664 | render() called
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137714560969664 | render() called
2026-01-15 13:36:39 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-137714560969664 | No valid layers to render
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137714560969664 | render() called
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137714560969664 | render() called
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-137714560969664 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-137714560969664 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-137714560969664 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-137714560969664 | ProfileController initialized
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-137714560969664 | Loaded 0 interpretations from project
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dem_band = 1
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: scale = 50000.0
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dh_use_geom = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: show_topo = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: show_geol = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: show_struct = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: show_drillholes = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: show_interpretations = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: auto_lod = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: max_points = 10000
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-137714560969664 | Settings loaded successfully from Project/Global config
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-137714560969664 | Saved 1 interpretations to project
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-137714560969664 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-137714560969664 | ProfileController initialized
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-137714560969664 | Loaded 0 interpretations from project
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dem_band = 1
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: scale = 50000.0
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dh_use_geom = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: show_topo = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: show_geol = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: show_struct = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: show_drillholes = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: show_interpretations = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: auto_lod = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: max_points = 10000
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-137714560969664 | Settings loaded successfully from Project/Global config
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-137714560969664 | Saved 1 interpretations to project
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-137714560969664 | Saved 0 interpretations to project
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-137714560969664 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-137714560969664 | ProfileController initialized
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-137714560969664 | Loaded 0 interpretations from project
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dem_band = 1
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: scale = 50000.0
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dh_use_geom = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: show_topo = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: show_geol = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: show_struct = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: show_drillholes = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: show_interpretations = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: auto_lod = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: max_points = 10000
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-137714560969664 | Settings loaded successfully from Project/Global config
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-137714560969664 | Loaded 1 interpretations from project
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-137714560969664 | Point 1 added: 0.00, 0.00
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-137714560969664 | Point 2 added: 10.00, 10.00
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-137714560969664 | finalize_measurement called with 2 points
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-137714560969664 | Setting finalized = True
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-137714560969664 | Measurement finalized: 2 points, 14.14m total distance
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-137714560969664 | Rubber band redrawn with final points only
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-137714560969664 | Switching to pan tool to stop measurement
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-137714560969664 | Pan tool activated - measurement should be frozen
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-137714560969664 | reset() called, finalized=True
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-137714560969664 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-137714560969664 | Point 1 added: 0.00, 0.00
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-137714560969664 | Point 2 added: 100.00, 100.00
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-137714560969664 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-137714560969664 | ProfileController initialized
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-137714560969664 | Loaded 1 interpretations from project
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dem_band = 1
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: scale = 50000.0
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: dh_use_geom = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: show_topo = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: show_geol = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: show_struct = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: show_drillholes = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: show_interpretations = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: auto_lod = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:36:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137714560969664 | Global setting fallback: max_points = 10000
2026-01-15 13:36:39 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-137714560969664 | Settings loaded successfully from Project/Global config
2026-01-15 13:37:47 | DEBUG    | SecInterp | setup_logging:142 | Thread-128780209757120 | Logging system initialized. Root Level: 10
2026-01-15 13:37:47 | DEBUG    | SecInterp | setup_logging:143 | Thread-128780209757120 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-128780209757120 | Configuration reset to defaults initiated
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128780209757120 | Config set: SecInterp/scale = 50000.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128780209757120 | Config set: SecInterp/vert_exag = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128780209757120 | Config set: SecInterp/buffer_dist = 100.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128780209757120 | Config set: SecInterp/show_topo = True
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128780209757120 | Config set: SecInterp/show_geol = True
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128780209757120 | Config set: SecInterp/show_struct = True
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128780209757120 | Config set: SecInterp/show_drillholes = True
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128780209757120 | Config set: SecInterp/show_interpretations = True
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128780209757120 | Config set: SecInterp/interp_inherit_geol = True
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128780209757120 | Config set: SecInterp/interp_inherit_drill = True
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128780209757120 | Config set: SecInterp/dh_use_geom = True
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128780209757120 | Config set: SecInterp/auto_lod = False
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128780209757120 | Config set: SecInterp/adaptive_sampling = True
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128780209757120 | Config set: SecInterp/max_points = 10000
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128780209757120 | Config set: SecInterp/dem_band = 1
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128780209757120 | Config set: SecInterp/scale = 200.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128780209757120 | Config set: SecInterp/scale = 20000.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128780209757120 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128780209757120 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128780209757120 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-128780209757120 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-128780209757120 | No collars found within buffer area.
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-128780209757120 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-128780209757120 | DrillholeService.project_collars END: Found 1 collars.
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-128780209757120 | ✓ Saving profile axes...
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-128780209757120 | ✓ Saving topographic profile...
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-128780209757120 | ✓ Saving profile axes...
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-128780209757120 | ✓ Saving interpretation data...
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-128780209757120 | 3D Export features are restricted for this user.
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-128780209757120 | ✓ Saving topographic profile...
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-128780209757120 | ✓ Saving profile axes...
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-128780209757120 | ✓ Saving interpretation data...
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-128780209757120 | ✓ Saving 3D interpretation data...
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-128780209757120 | ✓ Saving topographic profile...
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-128780209757120 | ✓ Saving profile axes...
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-128780209757120 | ✓ Saving geological profile...
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-128780209757120 | ✓ Saving structural profile...
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-128780209757120 | ✓ Saving drillhole data...
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-128780209757120 | ✓ Saving interpretation data...
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-128780209757120 | Access denied for restricted feature: 3D Export
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-128780209757120 | 3D Export features are restricted for this user.
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-128780209757120 | ✓ Saving topographic profile...
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-128780209757120 | ✓ Saving profile axes...
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-128780209757120 | No interpretations provided for export.
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-128780209757120 | ✓ Saving drillhole data...
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-128780209757120 | ✓ Saving geological profile...
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-128780209757120 | ✓ Saving interpretation data...
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-128780209757120 | ✓ Saving 3D interpretation data...
2026-01-15 13:37:47 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-128780209757120 | Invalid section line layer, skipping 3D export.
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-128780209757120 | ✓ Saving interpretation data...
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-128780209757120 | ✓ Saving structural profile...
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-128780209757120 | ✓ Saving topographic profile...
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-128780209757120 | Generating master profile with interval=10.00
2026-01-15 13:37:47 | INFO     | SecInterp.performance | measure_operation:244 | Thread-128780209757120 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0032, 'memory_mb': 0.0, 'memory_peak_mb': 0.13, 'timestamp': '2026-01-15 13:37:47', 'args_count': 5, 'kwargs_keys': []}
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-128780209757120 | Generating master profile with interval=50.00
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-128780209757120 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-128780209757120 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-128780209757120 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-128780209757120 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-128780209757120 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-128780209757120 | Running geometry operation: test
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-128780209757120 | Generated 1 drillhole traces
2026-01-15 13:37:47 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-128780209757120 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:37:47 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-128780209757120 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-128780209757120 | Generated 1 drillhole traces
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-128780209757120 | Drillhole preview skipped: No Collar ID field selected.
2026-01-15 13:37:47 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-128780209757120 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:37:47 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-128780209757120 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:37:47 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-128780209757120 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:37:47 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-128780209757120 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:37:47 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-128780209757120 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-128780209757120 | Analyzing structures in Structure Layer with buffer 10m
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-128780209757120 | Processed 1 structural measurements from Structure Layer
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-128780209757120 | Successfully exported to /tmp/test_dynamic.shp
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-128780209757120 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-128780209757120 | Generated QML style: /tmp/test.qml
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-128780209757120 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-128780209757120 | Generated QML style: dummy.qml
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-128780209757120 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-128780209757120 | Generated QML style: dummy.qml
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-128780209757120 | Loaded 0 interpretations from project
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:369 | Thread-128780209757120 | Inherited attributes from geology: GeologyUnit
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-128780209757120 | Loaded 0 interpretations from project
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: section_layer = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: section_layer_name = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-128780209757120 | Failed to restore layer for section_layer
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: buffer_dist = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dem_layer = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dem_layer_name = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-128780209757120 | Failed to restore layer for dem_layer
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dem_band = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: scale = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: geol_layer = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: geol_layer_name = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-128780209757120 | Failed to restore layer for geol_layer
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: geol_field = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: struct_layer = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: struct_layer_name = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-128780209757120 | Failed to restore layer for struct_layer
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: struct_dip_field = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: struct_strike_field = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dh_collar_layer = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-128780209757120 | Failed to restore layer for dh_collar_layer
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dh_collar_id = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dh_use_geom = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dh_collar_x = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dh_collar_y = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dh_collar_z = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dh_collar_depth = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dh_survey_layer = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-128780209757120 | Failed to restore layer for dh_survey_layer
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dh_survey_id = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dh_survey_depth = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dh_survey_azim = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dh_survey_incl = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dh_interval_layer = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-128780209757120 | Failed to restore layer for dh_interval_layer
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dh_interval_id = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dh_interval_from = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dh_interval_to = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dh_interval_lith = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: last_output_dir = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: interp_custom_fields = 1.0
2026-01-15 13:37:47 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-128780209757120 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: show_topo = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: show_geol = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: show_struct = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: show_drillholes = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: show_interpretations = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: auto_lod = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: adaptive_sampling = 1.0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: max_points = 1.0
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-128780209757120 | Settings loaded successfully from Project/Global config
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:477 | Thread-128780209757120 | Cache cleared by user
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-128780209757120 | GeologyGenerationTask started (Background Thread)
2026-01-15 13:37:47 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-128780209757120 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-128780209757120 | GeologyGenerationTask started (Background Thread)
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-128780209757120 | GeologyGenerationTask finished with 1 segments
2026-01-15 13:37:47 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-128780209757120 | Test Title: Test Message
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-128780209757120 | Test Title: Test Message
2026-01-15 13:37:47 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-128780209757120 | Test Title: Test Message
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-128780209757120 | CRITICAL_OP: finalize_polygon | points=2
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-128780209757120 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-15 13:37:47 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-128780209757120 | finalize_polygon() aborted - less than 3 points
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-128780209757120 | CRITICAL_OP: finalize_polygon | points=3
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-128780209757120 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-128780209757120 | finalize_polygon() - emitting polygonFinished signal for b3f78b9e-2d2a-4fb9-b785-20dab9f5ccd9
2026-01-15 13:37:47 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-128780209757120 | Interpretation polygon finalized with 3 vertices, ID: b3f78b9e-2d2a-4fb9-b785-20dab9f5ccd9
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-128780209757120 | finalize_polygon() completed
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-128780209757120 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-128780209757120 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-128780209757120 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-128780209757120 | ProfileInterpretationTool.reset() completed
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-128780209757120 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-128780209757120 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-128780209757120 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:37:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-128780209757120 | ProfileInterpretationTool.reset() completed
2026-01-15 13:37:48 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-128780209757120 | Failed to create locator for layer layer1: mock error
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-128780209757120 | ProfileInterpretationTool.activate() called
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-128780209757120 | ProfileInterpretationTool activated successfully
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-128780209757120 | ProfileInterpretationTool.deactivate() called
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-128780209757120 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-128780209757120 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-128780209757120 | ProfileInterpretationTool.reset() completed
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-128780209757120 | ProfileInterpretationTool deactivated successfully
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: buffer_dist = 100.5
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-128780209757120 | Persistent interpretations cleared by reset
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-128780209757120 | Setting saved to project: test_layer = id_123
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-128780209757120 | Setting saved to project: test_layer_name = RealName
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: test_layer = 1.0
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-128780209757120 | Project setting hit: test_layer_name = RealName
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-128780209757120 | Restoring layer: test_layer -> RealName
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-128780209757120 | Point 1 added: 0.00, 0.00
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-128780209757120 | Point 2 added: 100.00, 100.00
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-128780209757120 | Point 1 added: 50.00, 50.00
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-128780209757120 | reset() called, finalized=False
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-128780209757120 | finalize_measurement called with 1 points
2026-01-15 13:37:48 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-128780209757120 | Cannot finalize measurement with less than 2 points
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-128780209757120 | finalize_measurement called with 2 points
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-128780209757120 | Setting finalized = True
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-128780209757120 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-128780209757120 | Switching to pan tool to stop measurement
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-128780209757120 | Pan tool activated - measurement should be frozen
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-128780209757120 | Ignoring click - measurement is finalized
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-128780209757120 | finalize_measurement called with 2 points
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-128780209757120 | Setting finalized = True
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-128780209757120 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-128780209757120 | Switching to pan tool to stop measurement
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-128780209757120 | Pan tool activated - measurement should be frozen
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-128780209757120 | reset() called, finalized=False
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-128780209757120 | reset() called, finalized=False
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-128780209757120 | reset() called, finalized=True
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-128780209757120 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-128780209757120 | reset() called, finalized=False
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-128780209757120 | finalize_measurement called with 2 points
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-128780209757120 | Setting finalized = True
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-128780209757120 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-128780209757120 | Rubber band redrawn with final points only
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-128780209757120 | Switching to pan tool to stop measurement
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-128780209757120 | Pan tool activated - measurement should be frozen
2026-01-15 13:37:48 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-128780209757120 | Failed to create locator for layer layer1: mock error
2026-01-15 13:37:48 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-128780209757120 | Failed to create locator for layer l2: fail
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-128780209757120 | ProfileMeasureTool activated
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-128780209757120 | reset() called, finalized=False
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-128780209757120 | ProfileMeasureTool deactivated
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-128780209757120 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-128780209757120 | Adding 1 drillhole trace features to layer
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-128780209757120 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-128780209757120 | Adding 1 drillhole trace features to layer
2026-01-15 13:37:48 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-128780209757120 | Failed to create memory layer: Fail
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-128780209757120 | create_drillhole_trace_layer called with 0 holes
2026-01-15 13:37:48 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-128780209757120 | No drillhole data provided for trace layer
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-128780209757120 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-128780209757120 | Skipping hole H1: insufficient trace points (1)
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-128780209757120 | Adding 0 drillhole trace features to layer
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-128780209757120 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128780209757120 | render() called
2026-01-15 13:37:48 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-128780209757120 | No valid layers to render
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128780209757120 | render() called
2026-01-15 13:37:48 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-128780209757120 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128780209757120 | render() called
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128780209757120 | render() called
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128780209757120 | render() called
2026-01-15 13:37:48 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-128780209757120 | No valid layers to render
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128780209757120 | render() called
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128780209757120 | render() called
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-128780209757120 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-128780209757120 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128780209757120 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-128780209757120 | ProfileController initialized
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-128780209757120 | Loaded 0 interpretations from project
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dem_band = 1
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: scale = 50000.0
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dh_use_geom = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: show_topo = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: show_geol = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: show_struct = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: show_drillholes = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: show_interpretations = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: auto_lod = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: max_points = 10000
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-128780209757120 | Settings loaded successfully from Project/Global config
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-128780209757120 | Saved 1 interpretations to project
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128780209757120 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-128780209757120 | ProfileController initialized
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-128780209757120 | Loaded 0 interpretations from project
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dem_band = 1
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: scale = 50000.0
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dh_use_geom = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: show_topo = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: show_geol = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: show_struct = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: show_drillholes = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: show_interpretations = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: auto_lod = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: max_points = 10000
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-128780209757120 | Settings loaded successfully from Project/Global config
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-128780209757120 | Saved 1 interpretations to project
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-128780209757120 | Saved 0 interpretations to project
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128780209757120 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-128780209757120 | ProfileController initialized
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-128780209757120 | Loaded 0 interpretations from project
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dem_band = 1
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: scale = 50000.0
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dh_use_geom = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: show_topo = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: show_geol = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: show_struct = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: show_drillholes = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: show_interpretations = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: auto_lod = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: max_points = 10000
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-128780209757120 | Settings loaded successfully from Project/Global config
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-128780209757120 | Loaded 1 interpretations from project
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-128780209757120 | Point 1 added: 0.00, 0.00
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-128780209757120 | Point 2 added: 10.00, 10.00
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-128780209757120 | finalize_measurement called with 2 points
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-128780209757120 | Setting finalized = True
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-128780209757120 | Measurement finalized: 2 points, 14.14m total distance
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-128780209757120 | Rubber band redrawn with final points only
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-128780209757120 | Switching to pan tool to stop measurement
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-128780209757120 | Pan tool activated - measurement should be frozen
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-128780209757120 | reset() called, finalized=True
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-128780209757120 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-128780209757120 | Point 1 added: 0.00, 0.00
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-128780209757120 | Point 2 added: 100.00, 100.00
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128780209757120 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-128780209757120 | ProfileController initialized
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-128780209757120 | Loaded 1 interpretations from project
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dem_band = 1
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: scale = 50000.0
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: dh_use_geom = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: show_topo = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: show_geol = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: show_struct = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: show_drillholes = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: show_interpretations = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: auto_lod = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:37:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-128780209757120 | Global setting fallback: max_points = 10000
2026-01-15 13:37:48 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-128780209757120 | Settings loaded successfully from Project/Global config
2026-01-15 13:38:16 | DEBUG    | SecInterp | setup_logging:142 | Thread-136340439329728 | Logging system initialized. Root Level: 10
2026-01-15 13:38:16 | DEBUG    | SecInterp | setup_logging:143 | Thread-136340439329728 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 13:38:16 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-136340439329728 | Configuration reset to defaults initiated
2026-01-15 13:38:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136340439329728 | Config set: SecInterp/scale = 50000.0
2026-01-15 13:38:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136340439329728 | Config set: SecInterp/vert_exag = 1.0
2026-01-15 13:38:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136340439329728 | Config set: SecInterp/buffer_dist = 100.0
2026-01-15 13:38:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136340439329728 | Config set: SecInterp/show_topo = True
2026-01-15 13:38:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136340439329728 | Config set: SecInterp/show_geol = True
2026-01-15 13:38:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136340439329728 | Config set: SecInterp/show_struct = True
2026-01-15 13:38:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136340439329728 | Config set: SecInterp/show_drillholes = True
2026-01-15 13:38:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136340439329728 | Config set: SecInterp/show_interpretations = True
2026-01-15 13:38:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136340439329728 | Config set: SecInterp/interp_inherit_geol = True
2026-01-15 13:38:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136340439329728 | Config set: SecInterp/interp_inherit_drill = True
2026-01-15 13:38:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136340439329728 | Config set: SecInterp/dh_use_geom = True
2026-01-15 13:38:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136340439329728 | Config set: SecInterp/auto_lod = False
2026-01-15 13:38:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136340439329728 | Config set: SecInterp/adaptive_sampling = True
2026-01-15 13:38:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136340439329728 | Config set: SecInterp/max_points = 10000
2026-01-15 13:38:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136340439329728 | Config set: SecInterp/dem_band = 1
2026-01-15 13:38:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136340439329728 | Config set: SecInterp/scale = 200.0
2026-01-15 13:38:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136340439329728 | Config set: SecInterp/scale = 20000.0
2026-01-15 13:38:16 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-136340439329728 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:38:16 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-136340439329728 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:38:16 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-136340439329728 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:38:16 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-136340439329728 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:38:16 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-136340439329728 | No collars found within buffer area.
2026-01-15 13:38:16 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-136340439329728 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:38:16 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-136340439329728 | DrillholeService.project_collars END: Found 1 collars.
2026-01-15 13:38:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-136340439329728 | ✓ Saving profile axes...
2026-01-15 13:38:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-136340439329728 | ✓ Saving topographic profile...
2026-01-15 13:38:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-136340439329728 | ✓ Saving profile axes...
2026-01-15 13:38:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-136340439329728 | ✓ Saving interpretation data...
2026-01-15 13:38:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-136340439329728 | 3D Export features are restricted for this user.
2026-01-15 13:38:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-136340439329728 | ✓ Saving topographic profile...
2026-01-15 13:38:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-136340439329728 | ✓ Saving profile axes...
2026-01-15 13:38:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-136340439329728 | ✓ Saving interpretation data...
2026-01-15 13:38:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-136340439329728 | ✓ Saving 3D interpretation data...
2026-01-15 13:38:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-136340439329728 | ✓ Saving topographic profile...
2026-01-15 13:38:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-136340439329728 | ✓ Saving profile axes...
2026-01-15 13:38:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-136340439329728 | ✓ Saving geological profile...
2026-01-15 13:38:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-136340439329728 | ✓ Saving structural profile...
2026-01-15 13:38:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-136340439329728 | ✓ Saving drillhole data...
2026-01-15 13:38:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-136340439329728 | ✓ Saving interpretation data...
2026-01-15 13:38:16 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-136340439329728 | Access denied for restricted feature: 3D Export
2026-01-15 13:38:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-136340439329728 | 3D Export features are restricted for this user.
2026-01-15 13:38:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-136340439329728 | ✓ Saving topographic profile...
2026-01-15 13:38:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-136340439329728 | ✓ Saving profile axes...
2026-01-15 13:38:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-136340439329728 | No interpretations provided for export.
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-136340439329728 | ✓ Saving drillhole data...
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-136340439329728 | ✓ Saving geological profile...
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-136340439329728 | ✓ Saving interpretation data...
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-136340439329728 | ✓ Saving 3D interpretation data...
2026-01-15 13:38:17 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-136340439329728 | Invalid section line layer, skipping 3D export.
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-136340439329728 | ✓ Saving interpretation data...
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-136340439329728 | ✓ Saving structural profile...
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-136340439329728 | ✓ Saving topographic profile...
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-136340439329728 | Generating master profile with interval=10.00
2026-01-15 13:38:17 | INFO     | SecInterp.performance | measure_operation:244 | Thread-136340439329728 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0049, 'memory_mb': 0.0, 'memory_peak_mb': 0.13, 'timestamp': '2026-01-15 13:38:17', 'args_count': 5, 'kwargs_keys': []}
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-136340439329728 | Generating master profile with interval=50.00
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-136340439329728 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-136340439329728 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-136340439329728 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-136340439329728 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-136340439329728 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-136340439329728 | Running geometry operation: test
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-136340439329728 | Generated 1 drillhole traces
2026-01-15 13:38:17 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-136340439329728 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:38:17 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-136340439329728 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-136340439329728 | Generated 1 drillhole traces
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-136340439329728 | Drillhole preview skipped: No Collar ID field selected.
2026-01-15 13:38:17 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-136340439329728 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:38:17 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-136340439329728 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:38:17 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-136340439329728 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:38:17 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-136340439329728 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:38:17 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-136340439329728 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-136340439329728 | Analyzing structures in Structure Layer with buffer 10m
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-136340439329728 | Processed 1 structural measurements from Structure Layer
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-136340439329728 | Successfully exported to /tmp/test_dynamic.shp
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-136340439329728 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-136340439329728 | Generated QML style: /tmp/test.qml
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-136340439329728 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-136340439329728 | Generated QML style: dummy.qml
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-136340439329728 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-136340439329728 | Generated QML style: dummy.qml
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-136340439329728 | Loaded 0 interpretations from project
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:369 | Thread-136340439329728 | Inherited attributes from geology: GeologyUnit
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-136340439329728 | Loaded 0 interpretations from project
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: section_layer = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: section_layer_name = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-136340439329728 | Failed to restore layer for section_layer
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: buffer_dist = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dem_layer = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dem_layer_name = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-136340439329728 | Failed to restore layer for dem_layer
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dem_band = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: scale = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: geol_layer = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: geol_layer_name = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-136340439329728 | Failed to restore layer for geol_layer
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: geol_field = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: struct_layer = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: struct_layer_name = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-136340439329728 | Failed to restore layer for struct_layer
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: struct_dip_field = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: struct_strike_field = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dh_collar_layer = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-136340439329728 | Failed to restore layer for dh_collar_layer
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dh_collar_id = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dh_use_geom = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dh_collar_x = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dh_collar_y = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dh_collar_z = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dh_collar_depth = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dh_survey_layer = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-136340439329728 | Failed to restore layer for dh_survey_layer
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dh_survey_id = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dh_survey_depth = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dh_survey_azim = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dh_survey_incl = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dh_interval_layer = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-136340439329728 | Failed to restore layer for dh_interval_layer
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dh_interval_id = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dh_interval_from = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dh_interval_to = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dh_interval_lith = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: last_output_dir = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: interp_custom_fields = 1.0
2026-01-15 13:38:17 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-136340439329728 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: show_topo = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: show_geol = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: show_struct = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: show_drillholes = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: show_interpretations = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: auto_lod = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: adaptive_sampling = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: max_points = 1.0
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-136340439329728 | Settings loaded successfully from Project/Global config
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:477 | Thread-136340439329728 | Cache cleared by user
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-136340439329728 | GeologyGenerationTask started (Background Thread)
2026-01-15 13:38:17 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-136340439329728 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-136340439329728 | GeologyGenerationTask started (Background Thread)
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-136340439329728 | GeologyGenerationTask finished with 1 segments
2026-01-15 13:38:17 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-136340439329728 | Test Title: Test Message
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-136340439329728 | Test Title: Test Message
2026-01-15 13:38:17 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-136340439329728 | Test Title: Test Message
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-136340439329728 | CRITICAL_OP: finalize_polygon | points=2
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-136340439329728 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-15 13:38:17 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-136340439329728 | finalize_polygon() aborted - less than 3 points
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-136340439329728 | CRITICAL_OP: finalize_polygon | points=3
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-136340439329728 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-136340439329728 | finalize_polygon() - emitting polygonFinished signal for 8dd56993-cece-43eb-a4b5-9469311b9577
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-136340439329728 | Interpretation polygon finalized with 3 vertices, ID: 8dd56993-cece-43eb-a4b5-9469311b9577
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-136340439329728 | finalize_polygon() completed
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-136340439329728 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-136340439329728 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-136340439329728 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-136340439329728 | ProfileInterpretationTool.reset() completed
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-136340439329728 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-136340439329728 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-136340439329728 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-136340439329728 | ProfileInterpretationTool.reset() completed
2026-01-15 13:38:17 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-136340439329728 | Failed to create locator for layer layer1: mock error
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-136340439329728 | ProfileInterpretationTool.activate() called
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-136340439329728 | ProfileInterpretationTool activated successfully
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-136340439329728 | ProfileInterpretationTool.deactivate() called
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-136340439329728 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-136340439329728 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-136340439329728 | ProfileInterpretationTool.reset() completed
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-136340439329728 | ProfileInterpretationTool deactivated successfully
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: buffer_dist = 100.5
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-136340439329728 | Persistent interpretations cleared by reset
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-136340439329728 | Setting saved to project: test_layer = id_123
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-136340439329728 | Setting saved to project: test_layer_name = RealName
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: test_layer = 1.0
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-136340439329728 | Project setting hit: test_layer_name = RealName
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-136340439329728 | Restoring layer: test_layer -> RealName
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-136340439329728 | Point 1 added: 0.00, 0.00
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-136340439329728 | Point 2 added: 100.00, 100.00
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-136340439329728 | Point 1 added: 50.00, 50.00
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-136340439329728 | reset() called, finalized=False
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-136340439329728 | finalize_measurement called with 1 points
2026-01-15 13:38:17 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-136340439329728 | Cannot finalize measurement with less than 2 points
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-136340439329728 | finalize_measurement called with 2 points
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-136340439329728 | Setting finalized = True
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-136340439329728 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-136340439329728 | Switching to pan tool to stop measurement
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-136340439329728 | Pan tool activated - measurement should be frozen
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-136340439329728 | Ignoring click - measurement is finalized
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-136340439329728 | finalize_measurement called with 2 points
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-136340439329728 | Setting finalized = True
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-136340439329728 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-136340439329728 | Switching to pan tool to stop measurement
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-136340439329728 | Pan tool activated - measurement should be frozen
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-136340439329728 | reset() called, finalized=False
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-136340439329728 | reset() called, finalized=False
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-136340439329728 | reset() called, finalized=True
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-136340439329728 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-136340439329728 | reset() called, finalized=False
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-136340439329728 | finalize_measurement called with 2 points
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-136340439329728 | Setting finalized = True
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-136340439329728 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-136340439329728 | Rubber band redrawn with final points only
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-136340439329728 | Switching to pan tool to stop measurement
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-136340439329728 | Pan tool activated - measurement should be frozen
2026-01-15 13:38:17 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-136340439329728 | Failed to create locator for layer layer1: mock error
2026-01-15 13:38:17 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-136340439329728 | Failed to create locator for layer l2: fail
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-136340439329728 | ProfileMeasureTool activated
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-136340439329728 | reset() called, finalized=False
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-136340439329728 | ProfileMeasureTool deactivated
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-136340439329728 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-136340439329728 | Adding 1 drillhole trace features to layer
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-136340439329728 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-136340439329728 | Adding 1 drillhole trace features to layer
2026-01-15 13:38:17 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-136340439329728 | Failed to create memory layer: Fail
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-136340439329728 | create_drillhole_trace_layer called with 0 holes
2026-01-15 13:38:17 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-136340439329728 | No drillhole data provided for trace layer
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-136340439329728 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-136340439329728 | Skipping hole H1: insufficient trace points (1)
2026-01-15 13:38:17 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-136340439329728 | Adding 0 drillhole trace features to layer
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-136340439329728 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136340439329728 | render() called
2026-01-15 13:38:17 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-136340439329728 | No valid layers to render
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136340439329728 | render() called
2026-01-15 13:38:17 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-136340439329728 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136340439329728 | render() called
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136340439329728 | render() called
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136340439329728 | render() called
2026-01-15 13:38:17 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-136340439329728 | No valid layers to render
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136340439329728 | render() called
2026-01-15 13:38:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136340439329728 | render() called
2026-01-15 13:38:18 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-136340439329728 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-15 13:38:18 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-136340439329728 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-136340439329728 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-136340439329728 | ProfileController initialized
2026-01-15 13:38:18 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-136340439329728 | Loaded 0 interpretations from project
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dem_band = 1
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: scale = 50000.0
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dh_use_geom = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: show_topo = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: show_geol = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: show_struct = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: show_drillholes = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: show_interpretations = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: auto_lod = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: max_points = 10000
2026-01-15 13:38:18 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-136340439329728 | Settings loaded successfully from Project/Global config
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-136340439329728 | Saved 1 interpretations to project
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-136340439329728 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-136340439329728 | ProfileController initialized
2026-01-15 13:38:18 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-136340439329728 | Loaded 0 interpretations from project
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dem_band = 1
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: scale = 50000.0
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dh_use_geom = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: show_topo = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: show_geol = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: show_struct = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: show_drillholes = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: show_interpretations = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: auto_lod = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: max_points = 10000
2026-01-15 13:38:18 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-136340439329728 | Settings loaded successfully from Project/Global config
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-136340439329728 | Saved 1 interpretations to project
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-136340439329728 | Saved 0 interpretations to project
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-136340439329728 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-136340439329728 | ProfileController initialized
2026-01-15 13:38:18 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-136340439329728 | Loaded 0 interpretations from project
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dem_band = 1
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: scale = 50000.0
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dh_use_geom = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: show_topo = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: show_geol = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: show_struct = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: show_drillholes = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: show_interpretations = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: auto_lod = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: max_points = 10000
2026-01-15 13:38:18 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-136340439329728 | Settings loaded successfully from Project/Global config
2026-01-15 13:38:18 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-136340439329728 | Loaded 1 interpretations from project
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-136340439329728 | Point 1 added: 0.00, 0.00
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-136340439329728 | Point 2 added: 10.00, 10.00
2026-01-15 13:38:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-136340439329728 | finalize_measurement called with 2 points
2026-01-15 13:38:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-136340439329728 | Setting finalized = True
2026-01-15 13:38:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-136340439329728 | Measurement finalized: 2 points, 14.14m total distance
2026-01-15 13:38:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-136340439329728 | Rubber band redrawn with final points only
2026-01-15 13:38:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-136340439329728 | Switching to pan tool to stop measurement
2026-01-15 13:38:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-136340439329728 | Pan tool activated - measurement should be frozen
2026-01-15 13:38:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-136340439329728 | reset() called, finalized=True
2026-01-15 13:38:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-136340439329728 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-136340439329728 | Point 1 added: 0.00, 0.00
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-136340439329728 | Point 2 added: 100.00, 100.00
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-136340439329728 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-136340439329728 | ProfileController initialized
2026-01-15 13:38:18 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-136340439329728 | Loaded 1 interpretations from project
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dem_band = 1
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: scale = 50000.0
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: dh_use_geom = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: show_topo = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: show_geol = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: show_struct = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: show_drillholes = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: show_interpretations = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: auto_lod = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:38:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-136340439329728 | Global setting fallback: max_points = 10000
2026-01-15 13:38:18 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-136340439329728 | Settings loaded successfully from Project/Global config
2026-01-15 13:38:55 | DEBUG    | SecInterp | setup_logging:142 | Thread-136245551295424 | Logging system initialized. Root Level: 10
2026-01-15 13:38:55 | DEBUG    | SecInterp | setup_logging:143 | Thread-136245551295424 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 13:38:55 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-136245551295424 | Point 1 added: 0.00, 0.00
2026-01-15 13:38:55 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-136245551295424 | Point 2 added: 10.00, 10.00
2026-01-15 13:38:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-136245551295424 | finalize_measurement called with 2 points
2026-01-15 13:38:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-136245551295424 | Setting finalized = True
2026-01-15 13:38:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-136245551295424 | Measurement finalized: 2 points, 14.14m total distance
2026-01-15 13:38:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-136245551295424 | Rubber band redrawn with final points only
2026-01-15 13:38:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-136245551295424 | Switching to pan tool to stop measurement
2026-01-15 13:38:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-136245551295424 | Pan tool activated - measurement should be frozen
2026-01-15 13:38:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-136245551295424 | reset() called, finalized=True
2026-01-15 13:38:55 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-136245551295424 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 13:38:55 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-136245551295424 | Point 1 added: 0.00, 0.00
2026-01-15 13:38:55 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-136245551295424 | Point 2 added: 100.00, 100.00
2026-01-15 13:39:29 | DEBUG    | SecInterp | setup_logging:142 | Thread-139867497216960 | Logging system initialized. Root Level: 10
2026-01-15 13:39:29 | DEBUG    | SecInterp | setup_logging:143 | Thread-139867497216960 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-139867497216960 | Configuration reset to defaults initiated
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139867497216960 | Config set: SecInterp/scale = 50000.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139867497216960 | Config set: SecInterp/vert_exag = 1.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139867497216960 | Config set: SecInterp/buffer_dist = 100.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139867497216960 | Config set: SecInterp/show_topo = True
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139867497216960 | Config set: SecInterp/show_geol = True
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139867497216960 | Config set: SecInterp/show_struct = True
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139867497216960 | Config set: SecInterp/show_drillholes = True
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139867497216960 | Config set: SecInterp/show_interpretations = True
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139867497216960 | Config set: SecInterp/interp_inherit_geol = True
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139867497216960 | Config set: SecInterp/interp_inherit_drill = True
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139867497216960 | Config set: SecInterp/dh_use_geom = True
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139867497216960 | Config set: SecInterp/auto_lod = False
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139867497216960 | Config set: SecInterp/adaptive_sampling = True
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139867497216960 | Config set: SecInterp/max_points = 10000
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139867497216960 | Config set: SecInterp/dem_band = 1
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139867497216960 | Config set: SecInterp/scale = 200.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139867497216960 | Config set: SecInterp/scale = 20000.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139867497216960 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139867497216960 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139867497216960 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-139867497216960 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-139867497216960 | No collars found within buffer area.
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-139867497216960 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-139867497216960 | DrillholeService.project_collars END: Found 1 collars.
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-139867497216960 | ✓ Saving profile axes...
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-139867497216960 | ✓ Saving topographic profile...
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-139867497216960 | ✓ Saving profile axes...
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-139867497216960 | ✓ Saving interpretation data...
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-139867497216960 | 3D Export features are restricted for this user.
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-139867497216960 | ✓ Saving topographic profile...
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-139867497216960 | ✓ Saving profile axes...
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-139867497216960 | ✓ Saving interpretation data...
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-139867497216960 | ✓ Saving 3D interpretation data...
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-139867497216960 | ✓ Saving topographic profile...
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-139867497216960 | ✓ Saving profile axes...
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-139867497216960 | ✓ Saving geological profile...
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-139867497216960 | ✓ Saving structural profile...
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-139867497216960 | ✓ Saving drillhole data...
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-139867497216960 | ✓ Saving interpretation data...
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-139867497216960 | Access denied for restricted feature: 3D Export
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-139867497216960 | 3D Export features are restricted for this user.
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-139867497216960 | ✓ Saving topographic profile...
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-139867497216960 | ✓ Saving profile axes...
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-139867497216960 | No interpretations provided for export.
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-139867497216960 | ✓ Saving drillhole data...
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-139867497216960 | ✓ Saving geological profile...
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-139867497216960 | ✓ Saving interpretation data...
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-139867497216960 | ✓ Saving 3D interpretation data...
2026-01-15 13:39:29 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-139867497216960 | Invalid section line layer, skipping 3D export.
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-139867497216960 | ✓ Saving interpretation data...
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-139867497216960 | ✓ Saving structural profile...
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-139867497216960 | ✓ Saving topographic profile...
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-139867497216960 | Generating master profile with interval=10.00
2026-01-15 13:39:29 | INFO     | SecInterp.performance | measure_operation:244 | Thread-139867497216960 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0051, 'memory_mb': 0.0, 'memory_peak_mb': 0.13, 'timestamp': '2026-01-15 13:39:29', 'args_count': 5, 'kwargs_keys': []}
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-139867497216960 | Generating master profile with interval=50.00
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-139867497216960 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-139867497216960 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-139867497216960 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-139867497216960 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-139867497216960 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-139867497216960 | Running geometry operation: test
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-139867497216960 | Generated 1 drillhole traces
2026-01-15 13:39:29 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-139867497216960 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:39:29 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-139867497216960 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-139867497216960 | Generated 1 drillhole traces
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-139867497216960 | Drillhole preview skipped: No Collar ID field selected.
2026-01-15 13:39:29 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-139867497216960 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:39:29 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-139867497216960 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:39:29 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-139867497216960 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:39:29 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-139867497216960 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 13:39:29 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-139867497216960 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-139867497216960 | Analyzing structures in Structure Layer with buffer 10m
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-139867497216960 | Processed 1 structural measurements from Structure Layer
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-139867497216960 | Successfully exported to /tmp/test_dynamic.shp
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-139867497216960 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-139867497216960 | Generated QML style: /tmp/test.qml
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-139867497216960 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-139867497216960 | Generated QML style: dummy.qml
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-139867497216960 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-139867497216960 | Generated QML style: dummy.qml
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-139867497216960 | Loaded 0 interpretations from project
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:369 | Thread-139867497216960 | Inherited attributes from geology: GeologyUnit
2026-01-15 13:39:29 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-139867497216960 | Loaded 0 interpretations from project
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: section_layer = 1.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: section_layer_name = 1.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-139867497216960 | Failed to restore layer for section_layer
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: buffer_dist = 1.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dem_layer = 1.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dem_layer_name = 1.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-139867497216960 | Failed to restore layer for dem_layer
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dem_band = 1.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: scale = 1.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: geol_layer = 1.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: geol_layer_name = 1.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-139867497216960 | Failed to restore layer for geol_layer
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: geol_field = 1.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: struct_layer = 1.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: struct_layer_name = 1.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-139867497216960 | Failed to restore layer for struct_layer
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: struct_dip_field = 1.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: struct_strike_field = 1.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dh_collar_layer = 1.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-139867497216960 | Failed to restore layer for dh_collar_layer
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dh_collar_id = 1.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dh_use_geom = 1.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dh_collar_x = 1.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dh_collar_y = 1.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dh_collar_z = 1.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dh_collar_depth = 1.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dh_survey_layer = 1.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-139867497216960 | Failed to restore layer for dh_survey_layer
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dh_survey_id = 1.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dh_survey_depth = 1.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dh_survey_azim = 1.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dh_survey_incl = 1.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dh_interval_layer = 1.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-139867497216960 | Failed to restore layer for dh_interval_layer
2026-01-15 13:39:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dh_interval_id = 1.0
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dh_interval_from = 1.0
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dh_interval_to = 1.0
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dh_interval_lith = 1.0
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: last_output_dir = 1.0
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: interp_custom_fields = 1.0
2026-01-15 13:39:30 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-139867497216960 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: show_topo = 1.0
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: show_geol = 1.0
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: show_struct = 1.0
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: show_drillholes = 1.0
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: show_interpretations = 1.0
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: auto_lod = 1.0
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: adaptive_sampling = 1.0
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: max_points = 1.0
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-139867497216960 | Settings loaded successfully from Project/Global config
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:477 | Thread-139867497216960 | Cache cleared by user
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-139867497216960 | GeologyGenerationTask started (Background Thread)
2026-01-15 13:39:30 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-139867497216960 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-139867497216960 | GeologyGenerationTask started (Background Thread)
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-139867497216960 | GeologyGenerationTask finished with 1 segments
2026-01-15 13:39:30 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-139867497216960 | Test Title: Test Message
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-139867497216960 | Test Title: Test Message
2026-01-15 13:39:30 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-139867497216960 | Test Title: Test Message
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-139867497216960 | CRITICAL_OP: finalize_polygon | points=2
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-139867497216960 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-15 13:39:30 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-139867497216960 | finalize_polygon() aborted - less than 3 points
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-139867497216960 | CRITICAL_OP: finalize_polygon | points=3
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-139867497216960 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-139867497216960 | finalize_polygon() - emitting polygonFinished signal for db38855d-dba0-431f-8930-faf0b6a8b5b6
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-139867497216960 | Interpretation polygon finalized with 3 vertices, ID: db38855d-dba0-431f-8930-faf0b6a8b5b6
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-139867497216960 | finalize_polygon() completed
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-139867497216960 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-139867497216960 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-139867497216960 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-139867497216960 | ProfileInterpretationTool.reset() completed
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-139867497216960 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-139867497216960 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-139867497216960 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-139867497216960 | ProfileInterpretationTool.reset() completed
2026-01-15 13:39:30 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-139867497216960 | Failed to create locator for layer layer1: mock error
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-139867497216960 | ProfileInterpretationTool.activate() called
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-139867497216960 | ProfileInterpretationTool activated successfully
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-139867497216960 | ProfileInterpretationTool.deactivate() called
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-139867497216960 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-139867497216960 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-139867497216960 | ProfileInterpretationTool.reset() completed
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-139867497216960 | ProfileInterpretationTool deactivated successfully
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: buffer_dist = 100.5
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-139867497216960 | Persistent interpretations cleared by reset
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-139867497216960 | Setting saved to project: test_layer = id_123
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-139867497216960 | Setting saved to project: test_layer_name = RealName
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: test_layer = 1.0
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-139867497216960 | Project setting hit: test_layer_name = RealName
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-139867497216960 | Restoring layer: test_layer -> RealName
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-139867497216960 | Point 1 added: 0.00, 0.00
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-139867497216960 | Point 2 added: 100.00, 100.00
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-139867497216960 | Point 1 added: 50.00, 50.00
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-139867497216960 | reset() called, finalized=False
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-139867497216960 | finalize_measurement called with 1 points
2026-01-15 13:39:30 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-139867497216960 | Cannot finalize measurement with less than 2 points
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-139867497216960 | finalize_measurement called with 2 points
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-139867497216960 | Setting finalized = True
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-139867497216960 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-139867497216960 | Switching to pan tool to stop measurement
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-139867497216960 | Pan tool activated - measurement should be frozen
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-139867497216960 | Ignoring click - measurement is finalized
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-139867497216960 | finalize_measurement called with 2 points
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-139867497216960 | Setting finalized = True
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-139867497216960 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-139867497216960 | Switching to pan tool to stop measurement
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-139867497216960 | Pan tool activated - measurement should be frozen
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-139867497216960 | reset() called, finalized=False
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-139867497216960 | reset() called, finalized=False
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-139867497216960 | reset() called, finalized=True
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-139867497216960 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-139867497216960 | reset() called, finalized=False
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-139867497216960 | finalize_measurement called with 2 points
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-139867497216960 | Setting finalized = True
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-139867497216960 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-139867497216960 | Rubber band redrawn with final points only
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-139867497216960 | Switching to pan tool to stop measurement
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-139867497216960 | Pan tool activated - measurement should be frozen
2026-01-15 13:39:30 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-139867497216960 | Failed to create locator for layer layer1: mock error
2026-01-15 13:39:30 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-139867497216960 | Failed to create locator for layer l2: fail
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-139867497216960 | ProfileMeasureTool activated
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-139867497216960 | reset() called, finalized=False
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-139867497216960 | ProfileMeasureTool deactivated
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139867497216960 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-139867497216960 | Adding 1 drillhole trace features to layer
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139867497216960 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-139867497216960 | Adding 1 drillhole trace features to layer
2026-01-15 13:39:30 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-139867497216960 | Failed to create memory layer: Fail
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139867497216960 | create_drillhole_trace_layer called with 0 holes
2026-01-15 13:39:30 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-139867497216960 | No drillhole data provided for trace layer
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139867497216960 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-139867497216960 | Skipping hole H1: insufficient trace points (1)
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-139867497216960 | Adding 0 drillhole trace features to layer
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139867497216960 | create_drillhole_trace_layer called with 1 holes
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139867497216960 | render() called
2026-01-15 13:39:30 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-139867497216960 | No valid layers to render
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139867497216960 | render() called
2026-01-15 13:39:30 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-139867497216960 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139867497216960 | render() called
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139867497216960 | render() called
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139867497216960 | render() called
2026-01-15 13:39:30 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-139867497216960 | No valid layers to render
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139867497216960 | render() called
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139867497216960 | render() called
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-139867497216960 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-139867497216960 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139867497216960 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-139867497216960 | ProfileController initialized
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-139867497216960 | Loaded 0 interpretations from project
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dem_band = 1
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: scale = 50000.0
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dh_use_geom = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: show_topo = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: show_geol = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: show_struct = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: show_drillholes = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: show_interpretations = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: auto_lod = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: max_points = 10000
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-139867497216960 | Settings loaded successfully from Project/Global config
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-139867497216960 | Saved 1 interpretations to project
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139867497216960 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-139867497216960 | ProfileController initialized
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-139867497216960 | Loaded 0 interpretations from project
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dem_band = 1
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: scale = 50000.0
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dh_use_geom = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: show_topo = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: show_geol = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: show_struct = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: show_drillholes = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: show_interpretations = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: auto_lod = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: max_points = 10000
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-139867497216960 | Settings loaded successfully from Project/Global config
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-139867497216960 | Saved 1 interpretations to project
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-139867497216960 | Saved 0 interpretations to project
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139867497216960 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-139867497216960 | ProfileController initialized
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-139867497216960 | Loaded 0 interpretations from project
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dem_band = 1
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: scale = 50000.0
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dh_use_geom = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: show_topo = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: show_geol = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: show_struct = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: show_drillholes = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: show_interpretations = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: auto_lod = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: max_points = 10000
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-139867497216960 | Settings loaded successfully from Project/Global config
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-139867497216960 | Loaded 1 interpretations from project
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-139867497216960 | Point 1 added: 0.00, 0.00
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-139867497216960 | Point 2 added: 10.00, 10.00
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-139867497216960 | finalize_measurement called with 2 points
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-139867497216960 | Setting finalized = True
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-139867497216960 | Measurement finalized: 2 points, 14.14m total distance
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-139867497216960 | Rubber band redrawn with final points only
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-139867497216960 | Switching to pan tool to stop measurement
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-139867497216960 | Pan tool activated - measurement should be frozen
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-139867497216960 | reset() called, finalized=True
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-139867497216960 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-139867497216960 | Point 1 added: 0.00, 0.00
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-139867497216960 | Point 2 added: 100.00, 100.00
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-139867497216960 | Point 3 added: 200.00, 150.00
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139867497216960 | CacheService initialized (Default TTL: 3600s)
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-139867497216960 | ProfileController initialized
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-139867497216960 | Loaded 1 interpretations from project
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: buffer_dist = 100.0
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dem_band = 1
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: scale = 50000.0
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: vert_exag = 1.0
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: dh_use_geom = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: interp_inherit_geol = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: interp_inherit_drill = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: show_topo = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: show_geol = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: show_struct = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: show_drillholes = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: show_interpretations = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: auto_lod = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: adaptive_sampling = True
2026-01-15 13:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139867497216960 | Global setting fallback: max_points = 10000
2026-01-15 13:39:30 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-139867497216960 | Settings loaded successfully from Project/Global config
2026-01-15 14:15:26 | DEBUG    | SecInterp | setup_logging:142 | Thread-127197760670656 | Logging system initialized. Root Level: 10
2026-01-15 14:15:26 | DEBUG    | SecInterp | setup_logging:143 | Thread-127197760670656 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-127197760670656 | Configuration reset to defaults initiated
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127197760670656 | Config set: SecInterp/scale = 50000.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127197760670656 | Config set: SecInterp/vert_exag = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127197760670656 | Config set: SecInterp/buffer_dist = 100.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127197760670656 | Config set: SecInterp/show_topo = True
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127197760670656 | Config set: SecInterp/show_geol = True
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127197760670656 | Config set: SecInterp/show_struct = True
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127197760670656 | Config set: SecInterp/show_drillholes = True
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127197760670656 | Config set: SecInterp/show_interpretations = True
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127197760670656 | Config set: SecInterp/interp_inherit_geol = True
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127197760670656 | Config set: SecInterp/interp_inherit_drill = True
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127197760670656 | Config set: SecInterp/dh_use_geom = True
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127197760670656 | Config set: SecInterp/auto_lod = False
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127197760670656 | Config set: SecInterp/adaptive_sampling = True
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127197760670656 | Config set: SecInterp/max_points = 10000
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127197760670656 | Config set: SecInterp/dem_band = 1
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127197760670656 | Config set: SecInterp/scale = 200.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127197760670656 | Config set: SecInterp/scale = 20000.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-127197760670656 | CacheService initialized (Default TTL: 3600s)
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-127197760670656 | CacheService initialized (Default TTL: 3600s)
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-127197760670656 | CacheService initialized (Default TTL: 3600s)
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-127197760670656 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-127197760670656 | No collars found within buffer area.
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-127197760670656 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-127197760670656 | DrillholeService.project_collars END: Found 1 collars.
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-127197760670656 | ✓ Saving profile axes...
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-127197760670656 | ✓ Saving topographic profile...
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-127197760670656 | ✓ Saving profile axes...
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-127197760670656 | ✓ Saving interpretation data...
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-127197760670656 | 3D Export features are restricted for this user.
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-127197760670656 | ✓ Saving topographic profile...
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-127197760670656 | ✓ Saving profile axes...
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-127197760670656 | ✓ Saving interpretation data...
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-127197760670656 | ✓ Saving 3D interpretation data...
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-127197760670656 | ✓ Saving topographic profile...
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-127197760670656 | ✓ Saving profile axes...
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-127197760670656 | ✓ Saving geological profile...
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-127197760670656 | ✓ Saving structural profile...
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-127197760670656 | ✓ Saving drillhole data...
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-127197760670656 | ✓ Saving interpretation data...
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-127197760670656 | Access denied for restricted feature: 3D Export
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-127197760670656 | 3D Export features are restricted for this user.
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-127197760670656 | ✓ Saving topographic profile...
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-127197760670656 | ✓ Saving profile axes...
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-127197760670656 | No interpretations provided for export.
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-127197760670656 | ✓ Saving drillhole data...
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-127197760670656 | ✓ Saving geological profile...
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-127197760670656 | ✓ Saving interpretation data...
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-127197760670656 | ✓ Saving 3D interpretation data...
2026-01-15 14:15:27 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-127197760670656 | Invalid section line layer, skipping 3D export.
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-127197760670656 | ✓ Saving interpretation data...
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-127197760670656 | ✓ Saving structural profile...
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-127197760670656 | ✓ Saving topographic profile...
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-127197760670656 | Generating master profile with interval=10.00
2026-01-15 14:15:27 | INFO     | SecInterp.performance | measure_operation:244 | Thread-127197760670656 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0041, 'memory_mb': 0.0, 'memory_peak_mb': 0.13, 'timestamp': '2026-01-15 14:15:27', 'args_count': 5, 'kwargs_keys': []}
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-127197760670656 | Generating master profile with interval=50.00
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-127197760670656 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-127197760670656 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-127197760670656 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-127197760670656 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-127197760670656 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-127197760670656 | Running geometry operation: test
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-127197760670656 | Generated 1 drillhole traces
2026-01-15 14:15:27 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:242 | Thread-127197760670656 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 14:15:27 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:245 | Thread-127197760670656 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 224, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-127197760670656 | Generated 1 drillhole traces
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:165 | Thread-127197760670656 | Drillhole preview skipped: No Collar ID field selected.
2026-01-15 14:15:27 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-127197760670656 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 14:15:27 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-127197760670656 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 14:15:27 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-127197760670656 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 14:15:27 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-127197760670656 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 14:15:27 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-127197760670656 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-127197760670656 | Analyzing structures in Structure Layer with buffer 10m
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-127197760670656 | Processed 1 structural measurements from Structure Layer
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-127197760670656 | Successfully exported to /tmp/test_dynamic.shp
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-127197760670656 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-127197760670656 | Generated QML style: /tmp/test.qml
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-127197760670656 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-127197760670656 | Generated QML style: dummy.qml
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-127197760670656 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-127197760670656 | Generated QML style: dummy.qml
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-127197760670656 | Loaded 0 interpretations from project
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:369 | Thread-127197760670656 | Inherited attributes from geology: GeologyUnit
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-127197760670656 | Loaded 0 interpretations from project
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: section_layer = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: section_layer_name = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-127197760670656 | Failed to restore layer for section_layer
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: buffer_dist = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dem_layer = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dem_layer_name = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-127197760670656 | Failed to restore layer for dem_layer
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dem_band = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: scale = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: vert_exag = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: geol_layer = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: geol_layer_name = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-127197760670656 | Failed to restore layer for geol_layer
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: geol_field = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: struct_layer = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: struct_layer_name = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-127197760670656 | Failed to restore layer for struct_layer
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: struct_dip_field = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: struct_strike_field = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dh_collar_layer = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-127197760670656 | Failed to restore layer for dh_collar_layer
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dh_collar_id = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dh_use_geom = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dh_collar_x = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dh_collar_y = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dh_collar_z = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dh_collar_depth = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dh_survey_layer = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-127197760670656 | Failed to restore layer for dh_survey_layer
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dh_survey_id = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dh_survey_depth = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dh_survey_azim = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dh_survey_incl = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dh_interval_layer = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-127197760670656 | Failed to restore layer for dh_interval_layer
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dh_interval_id = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dh_interval_from = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dh_interval_to = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dh_interval_lith = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: last_output_dir = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: interp_custom_fields = 1.0
2026-01-15 14:15:27 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-127197760670656 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: show_topo = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: show_geol = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: show_struct = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: show_drillholes = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: show_interpretations = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: auto_lod = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: adaptive_sampling = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: max_points = 1.0
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-127197760670656 | Settings loaded successfully from Project/Global config
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:477 | Thread-127197760670656 | Cache cleared by user
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-127197760670656 | GeologyGenerationTask started (Background Thread)
2026-01-15 14:15:27 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-127197760670656 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-127197760670656 | GeologyGenerationTask started (Background Thread)
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-127197760670656 | GeologyGenerationTask finished with 1 segments
2026-01-15 14:15:27 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-127197760670656 | Test Title: Test Message
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-127197760670656 | Test Title: Test Message
2026-01-15 14:15:27 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-127197760670656 | Test Title: Test Message
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-127197760670656 | CRITICAL_OP: finalize_polygon | points=2
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-127197760670656 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-15 14:15:27 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-127197760670656 | finalize_polygon() aborted - less than 3 points
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-127197760670656 | CRITICAL_OP: finalize_polygon | points=3
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-127197760670656 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-127197760670656 | finalize_polygon() - emitting polygonFinished signal for 055a1cab-d062-4d79-93ba-2ac406af0a7f
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-127197760670656 | Interpretation polygon finalized with 3 vertices, ID: 055a1cab-d062-4d79-93ba-2ac406af0a7f
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-127197760670656 | finalize_polygon() completed
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-127197760670656 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-127197760670656 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-127197760670656 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-127197760670656 | ProfileInterpretationTool.reset() completed
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-127197760670656 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-127197760670656 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-127197760670656 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-127197760670656 | ProfileInterpretationTool.reset() completed
2026-01-15 14:15:27 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-127197760670656 | Failed to create locator for layer layer1: mock error
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-127197760670656 | ProfileInterpretationTool.activate() called
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-127197760670656 | ProfileInterpretationTool activated successfully
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-127197760670656 | ProfileInterpretationTool.deactivate() called
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-127197760670656 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-127197760670656 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-127197760670656 | ProfileInterpretationTool.reset() completed
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-127197760670656 | ProfileInterpretationTool deactivated successfully
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: buffer_dist = 100.5
2026-01-15 14:15:27 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-127197760670656 | Persistent interpretations cleared by reset
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-127197760670656 | Setting saved to project: test_layer = id_123
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-127197760670656 | Setting saved to project: test_layer_name = RealName
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: test_layer = 1.0
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-127197760670656 | Project setting hit: test_layer_name = RealName
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-127197760670656 | Restoring layer: test_layer -> RealName
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-127197760670656 | Point 1 added: 0.00, 0.00
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-127197760670656 | Point 2 added: 100.00, 100.00
2026-01-15 14:15:27 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-127197760670656 | Point 1 added: 50.00, 50.00
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-127197760670656 | reset() called, finalized=False
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-127197760670656 | finalize_measurement called with 1 points
2026-01-15 14:15:28 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-127197760670656 | Cannot finalize measurement with less than 2 points
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-127197760670656 | finalize_measurement called with 2 points
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-127197760670656 | Setting finalized = True
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-127197760670656 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-127197760670656 | Switching to pan tool to stop measurement
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-127197760670656 | Pan tool activated - measurement should be frozen
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-127197760670656 | Ignoring click - measurement is finalized
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-127197760670656 | finalize_measurement called with 2 points
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-127197760670656 | Setting finalized = True
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-127197760670656 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-127197760670656 | Switching to pan tool to stop measurement
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-127197760670656 | Pan tool activated - measurement should be frozen
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-127197760670656 | reset() called, finalized=False
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-127197760670656 | reset() called, finalized=False
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-127197760670656 | reset() called, finalized=True
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-127197760670656 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-127197760670656 | reset() called, finalized=False
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-127197760670656 | finalize_measurement called with 2 points
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-127197760670656 | Setting finalized = True
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-127197760670656 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-127197760670656 | Rubber band redrawn with final points only
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-127197760670656 | Switching to pan tool to stop measurement
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-127197760670656 | Pan tool activated - measurement should be frozen
2026-01-15 14:15:28 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-127197760670656 | Failed to create locator for layer layer1: mock error
2026-01-15 14:15:28 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-127197760670656 | Failed to create locator for layer l2: fail
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-127197760670656 | ProfileMeasureTool activated
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-127197760670656 | reset() called, finalized=False
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-127197760670656 | ProfileMeasureTool deactivated
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-127197760670656 | create_drillhole_trace_layer called with 1 holes
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-127197760670656 | Adding 1 drillhole trace features to layer
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-127197760670656 | create_drillhole_trace_layer called with 1 holes
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-127197760670656 | Adding 1 drillhole trace features to layer
2026-01-15 14:15:28 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-127197760670656 | Failed to create memory layer: Fail
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-127197760670656 | create_drillhole_trace_layer called with 0 holes
2026-01-15 14:15:28 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-127197760670656 | No drillhole data provided for trace layer
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-127197760670656 | create_drillhole_trace_layer called with 1 holes
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-127197760670656 | Skipping hole H1: insufficient trace points (1)
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-127197760670656 | Adding 0 drillhole trace features to layer
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-127197760670656 | create_drillhole_trace_layer called with 1 holes
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-127197760670656 | render() called
2026-01-15 14:15:28 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-127197760670656 | No valid layers to render
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-127197760670656 | render() called
2026-01-15 14:15:28 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-127197760670656 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-127197760670656 | render() called
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-127197760670656 | render() called
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-127197760670656 | render() called
2026-01-15 14:15:28 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-127197760670656 | No valid layers to render
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-127197760670656 | render() called
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-127197760670656 | render() called
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-127197760670656 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-127197760670656 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-127197760670656 | CacheService initialized (Default TTL: 3600s)
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-127197760670656 | ProfileController initialized
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-127197760670656 | Loaded 0 interpretations from project
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: buffer_dist = 100.0
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dem_band = 1
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: scale = 50000.0
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: vert_exag = 1.0
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dh_use_geom = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: interp_inherit_geol = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: interp_inherit_drill = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: show_topo = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: show_geol = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: show_struct = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: show_drillholes = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: show_interpretations = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: auto_lod = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: adaptive_sampling = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: max_points = 10000
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-127197760670656 | Settings loaded successfully from Project/Global config
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-127197760670656 | Saved 1 interpretations to project
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-127197760670656 | CacheService initialized (Default TTL: 3600s)
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-127197760670656 | ProfileController initialized
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-127197760670656 | Loaded 0 interpretations from project
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: buffer_dist = 100.0
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dem_band = 1
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: scale = 50000.0
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: vert_exag = 1.0
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dh_use_geom = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: interp_inherit_geol = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: interp_inherit_drill = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: show_topo = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: show_geol = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: show_struct = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: show_drillholes = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: show_interpretations = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: auto_lod = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: adaptive_sampling = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: max_points = 10000
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-127197760670656 | Settings loaded successfully from Project/Global config
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-127197760670656 | Saved 1 interpretations to project
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-127197760670656 | Saved 0 interpretations to project
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-127197760670656 | CacheService initialized (Default TTL: 3600s)
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-127197760670656 | ProfileController initialized
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-127197760670656 | Loaded 0 interpretations from project
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: buffer_dist = 100.0
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dem_band = 1
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: scale = 50000.0
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: vert_exag = 1.0
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dh_use_geom = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: interp_inherit_geol = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: interp_inherit_drill = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: show_topo = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: show_geol = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: show_struct = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: show_drillholes = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: show_interpretations = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: auto_lod = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: adaptive_sampling = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: max_points = 10000
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-127197760670656 | Settings loaded successfully from Project/Global config
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-127197760670656 | Loaded 1 interpretations from project
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-127197760670656 | Point 1 added: 0.00, 0.00
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-127197760670656 | Point 2 added: 10.00, 10.00
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-127197760670656 | finalize_measurement called with 2 points
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-127197760670656 | Setting finalized = True
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-127197760670656 | Measurement finalized: 2 points, 14.14m total distance
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-127197760670656 | Rubber band redrawn with final points only
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-127197760670656 | Switching to pan tool to stop measurement
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-127197760670656 | Pan tool activated - measurement should be frozen
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-127197760670656 | reset() called, finalized=True
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-127197760670656 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-127197760670656 | Point 1 added: 0.00, 0.00
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-127197760670656 | Point 2 added: 100.00, 100.00
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-127197760670656 | Point 3 added: 200.00, 150.00
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-127197760670656 | CacheService initialized (Default TTL: 3600s)
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-127197760670656 | ProfileController initialized
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-127197760670656 | Loaded 1 interpretations from project
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: buffer_dist = 100.0
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dem_band = 1
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: scale = 50000.0
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: vert_exag = 1.0
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: dh_use_geom = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: interp_inherit_geol = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: interp_inherit_drill = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: show_topo = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: show_geol = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: show_struct = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: show_drillholes = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: show_interpretations = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: auto_lod = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: adaptive_sampling = True
2026-01-15 14:15:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-127197760670656 | Global setting fallback: max_points = 10000
2026-01-15 14:15:28 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-127197760670656 | Settings loaded successfully from Project/Global config
2026-01-15 14:25:04 | DEBUG    | SecInterp | setup_logging:144 | Thread-124355396959168 | Logging system initialized. Root Level: 10
2026-01-15 14:25:04 | DEBUG    | SecInterp | setup_logging:145 | Thread-124355396959168 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-124355396959168 | Configuration reset to defaults initiated
2026-01-15 14:25:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124355396959168 | Config set: SecInterp/scale = 50000.0
2026-01-15 14:25:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124355396959168 | Config set: SecInterp/vert_exag = 1.0
2026-01-15 14:25:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124355396959168 | Config set: SecInterp/buffer_dist = 100.0
2026-01-15 14:25:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124355396959168 | Config set: SecInterp/show_topo = True
2026-01-15 14:25:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124355396959168 | Config set: SecInterp/show_geol = True
2026-01-15 14:25:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124355396959168 | Config set: SecInterp/show_struct = True
2026-01-15 14:25:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124355396959168 | Config set: SecInterp/show_drillholes = True
2026-01-15 14:25:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124355396959168 | Config set: SecInterp/show_interpretations = True
2026-01-15 14:25:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124355396959168 | Config set: SecInterp/interp_inherit_geol = True
2026-01-15 14:25:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124355396959168 | Config set: SecInterp/interp_inherit_drill = True
2026-01-15 14:25:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124355396959168 | Config set: SecInterp/dh_use_geom = True
2026-01-15 14:25:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124355396959168 | Config set: SecInterp/auto_lod = False
2026-01-15 14:25:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124355396959168 | Config set: SecInterp/adaptive_sampling = True
2026-01-15 14:25:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124355396959168 | Config set: SecInterp/max_points = 10000
2026-01-15 14:25:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124355396959168 | Config set: SecInterp/dem_band = 1
2026-01-15 14:25:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124355396959168 | Config set: SecInterp/scale = 200.0
2026-01-15 14:25:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124355396959168 | Config set: SecInterp/scale = 20000.0
2026-01-15 14:25:04 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124355396959168 | CacheService initialized (Default TTL: 3600s)
2026-01-15 14:25:04 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124355396959168 | CacheService initialized (Default TTL: 3600s)
2026-01-15 14:25:04 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124355396959168 | CacheService initialized (Default TTL: 3600s)
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-124355396959168 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:96 | Thread-124355396959168 | No collars found within buffer area.
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-124355396959168 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:117 | Thread-124355396959168 | DrillholeService.project_collars END: Found 1 collars.
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-124355396959168 | ✓ Saving profile axes...
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-124355396959168 | ✓ Saving topographic profile...
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-124355396959168 | ✓ Saving profile axes...
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-124355396959168 | ✓ Saving interpretation data...
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:324 | Thread-124355396959168 | 3D Export features are restricted for this user.
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-124355396959168 | ✓ Saving topographic profile...
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-124355396959168 | ✓ Saving profile axes...
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-124355396959168 | ✓ Saving interpretation data...
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:307 | Thread-124355396959168 | ✓ Saving 3D interpretation data...
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-124355396959168 | ✓ Saving topographic profile...
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-124355396959168 | ✓ Saving profile axes...
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:150 | Thread-124355396959168 | ✓ Saving geological profile...
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:178 | Thread-124355396959168 | ✓ Saving structural profile...
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:221 | Thread-124355396959168 | ✓ Saving drillhole data...
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-124355396959168 | ✓ Saving interpretation data...
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-124355396959168 | Access denied for restricted feature: 3D Export
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:324 | Thread-124355396959168 | 3D Export features are restricted for this user.
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-124355396959168 | ✓ Saving topographic profile...
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-124355396959168 | ✓ Saving profile axes...
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-124355396959168 | No interpretations provided for export.
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:221 | Thread-124355396959168 | ✓ Saving drillhole data...
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:150 | Thread-124355396959168 | ✓ Saving geological profile...
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-124355396959168 | ✓ Saving interpretation data...
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:307 | Thread-124355396959168 | ✓ Saving 3D interpretation data...
2026-01-15 14:25:04 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:322 | Thread-124355396959168 | Invalid section line layer, skipping 3D export.
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-124355396959168 | ✓ Saving interpretation data...
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:178 | Thread-124355396959168 | ✓ Saving structural profile...
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-124355396959168 | ✓ Saving topographic profile...
2026-01-15 14:25:04 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:304 | Thread-124355396959168 | Generating master profile with interval=10.00
2026-01-15 14:25:04 | INFO     | SecInterp.performance | measure_operation:244 | Thread-124355396959168 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0034, 'memory_mb': 0.0, 'memory_peak_mb': 0.13, 'timestamp': '2026-01-15 14:25:04', 'args_count': 5, 'kwargs_keys': []}
2026-01-15 14:25:04 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:304 | Thread-124355396959168 | Generating master profile with interval=50.00
2026-01-15 14:25:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:61 | Thread-124355396959168 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 14:25:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:61 | Thread-124355396959168 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 14:25:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-124355396959168 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-15 14:25:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-124355396959168 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-15 14:25:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-124355396959168 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-15 14:25:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-124355396959168 | Running geometry operation: test
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:260 | Thread-124355396959168 | Generated 1 drillhole traces
2026-01-15 14:25:04 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:252 | Thread-124355396959168 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 234, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 14:25:04 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:257 | Thread-124355396959168 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 234, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 234, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:260 | Thread-124355396959168 | Generated 1 drillhole traces
2026-01-15 14:25:04 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:173 | Thread-124355396959168 | Drillhole preview skipped: No Collar ID field selected.
2026-01-15 14:25:04 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-124355396959168 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 14:25:04 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-124355396959168 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 14:25:04 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:196 | Thread-124355396959168 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 191, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 14:25:04 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:321 | Thread-124355396959168 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 314, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 191, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 14:25:05 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:156 | Thread-124355396959168 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 154, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-124355396959168 | Analyzing structures in Structure Layer with buffer 10m
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:128 | Thread-124355396959168 | Processed 1 structural measurements from Structure Layer
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:149 | Thread-124355396959168 | Successfully exported to /tmp/test_dynamic.shp
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-124355396959168 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:135 | Thread-124355396959168 | Generated QML style: /tmp/test.qml
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-124355396959168 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:135 | Thread-124355396959168 | Generated QML style: dummy.qml
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-124355396959168 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:135 | Thread-124355396959168 | Generated QML style: dummy.qml
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-124355396959168 | Loaded 0 interpretations from project
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:381 | Thread-124355396959168 | Inherited attributes from geology: GeologyUnit
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-124355396959168 | Loaded 0 interpretations from project
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: section_layer = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: section_layer_name = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-124355396959168 | Failed to restore layer for section_layer
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: buffer_dist = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dem_layer = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dem_layer_name = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-124355396959168 | Failed to restore layer for dem_layer
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dem_band = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: scale = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: vert_exag = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: geol_layer = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: geol_layer_name = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-124355396959168 | Failed to restore layer for geol_layer
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: geol_field = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: struct_layer = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: struct_layer_name = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-124355396959168 | Failed to restore layer for struct_layer
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: struct_dip_field = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: struct_strike_field = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dh_collar_layer = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-124355396959168 | Failed to restore layer for dh_collar_layer
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dh_collar_id = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dh_use_geom = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dh_collar_x = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dh_collar_y = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dh_collar_z = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dh_collar_depth = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dh_survey_layer = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-124355396959168 | Failed to restore layer for dh_survey_layer
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dh_survey_id = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dh_survey_depth = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dh_survey_azim = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dh_survey_incl = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dh_interval_layer = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-124355396959168 | Failed to restore layer for dh_interval_layer
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dh_interval_id = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dh_interval_from = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dh_interval_to = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dh_interval_lith = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: last_output_dir = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: interp_custom_fields = 1.0
2026-01-15 14:25:05 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:172 | Thread-124355396959168 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: show_topo = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: show_geol = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: show_struct = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: show_drillholes = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: show_interpretations = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: auto_lod = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: adaptive_sampling = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: max_points = 1.0
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-124355396959168 | Settings loaded successfully from Project/Global config
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:497 | Thread-124355396959168 | Cache cleared by user
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-124355396959168 | GeologyGenerationTask started (Background Thread)
2026-01-15 14:25:05 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:63 | Thread-124355396959168 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-124355396959168 | GeologyGenerationTask started (Background Thread)
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-124355396959168 | GeologyGenerationTask finished with 1 segments
2026-01-15 14:25:05 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-124355396959168 | Test Title: Test Message
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-124355396959168 | Test Title: Test Message
2026-01-15 14:25:05 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-124355396959168 | Test Title: Test Message
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-124355396959168 | CRITICAL_OP: finalize_polygon | points=2
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-124355396959168 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-15 14:25:05 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-124355396959168 | finalize_polygon() aborted - less than 3 points
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-124355396959168 | CRITICAL_OP: finalize_polygon | points=3
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-124355396959168 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:333 | Thread-124355396959168 | finalize_polygon() - emitting polygonFinished signal for 24f84ad9-a237-4924-a10b-5bd354f89ac2
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:339 | Thread-124355396959168 | Interpretation polygon finalized with 3 vertices, ID: 24f84ad9-a237-4924-a10b-5bd354f89ac2
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:342 | Thread-124355396959168 | finalize_polygon() completed
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-124355396959168 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-124355396959168 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-124355396959168 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-124355396959168 | ProfileInterpretationTool.reset() completed
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-124355396959168 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-124355396959168 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-124355396959168 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-124355396959168 | ProfileInterpretationTool.reset() completed
2026-01-15 14:25:05 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:111 | Thread-124355396959168 | Failed to create locator for layer layer1: mock error
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:142 | Thread-124355396959168 | ProfileInterpretationTool.activate() called
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:145 | Thread-124355396959168 | ProfileInterpretationTool activated successfully
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:150 | Thread-124355396959168 | ProfileInterpretationTool.deactivate() called
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-124355396959168 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-124355396959168 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-124355396959168 | ProfileInterpretationTool.reset() completed
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:153 | Thread-124355396959168 | ProfileInterpretationTool deactivated successfully
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: buffer_dist = 100.5
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:353 | Thread-124355396959168 | Persistent interpretations cleared by reset
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:405 | Thread-124355396959168 | Setting saved to project: test_layer = id_123
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:405 | Thread-124355396959168 | Setting saved to project: test_layer_name = RealName
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: test_layer = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:385 | Thread-124355396959168 | Project setting hit: test_layer_name = RealName
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:442 | Thread-124355396959168 | Restoring layer: test_layer -> RealName
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-124355396959168 | Point 1 added: 0.00, 0.00
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-124355396959168 | Point 2 added: 100.00, 100.00
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-124355396959168 | Point 1 added: 50.00, 50.00
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-124355396959168 | reset() called, finalized=False
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-124355396959168 | finalize_measurement called with 1 points
2026-01-15 14:25:05 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:275 | Thread-124355396959168 | Cannot finalize measurement with less than 2 points
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-124355396959168 | finalize_measurement called with 2 points
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-124355396959168 | Setting finalized = True
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-124355396959168 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-124355396959168 | Switching to pan tool to stop measurement
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-124355396959168 | Pan tool activated - measurement should be frozen
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:202 | Thread-124355396959168 | Ignoring click - measurement is finalized
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-124355396959168 | finalize_measurement called with 2 points
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-124355396959168 | Setting finalized = True
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-124355396959168 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-124355396959168 | Switching to pan tool to stop measurement
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-124355396959168 | Pan tool activated - measurement should be frozen
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-124355396959168 | reset() called, finalized=False
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-124355396959168 | reset() called, finalized=False
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-124355396959168 | reset() called, finalized=True
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:159 | Thread-124355396959168 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-124355396959168 | reset() called, finalized=False
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-124355396959168 | finalize_measurement called with 2 points
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-124355396959168 | Setting finalized = True
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-124355396959168 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:298 | Thread-124355396959168 | Rubber band redrawn with final points only
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-124355396959168 | Switching to pan tool to stop measurement
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-124355396959168 | Pan tool activated - measurement should be frozen
2026-01-15 14:25:05 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:103 | Thread-124355396959168 | Failed to create locator for layer layer1: mock error
2026-01-15 14:25:05 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:103 | Thread-124355396959168 | Failed to create locator for layer l2: fail
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:141 | Thread-124355396959168 | ProfileMeasureTool activated
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-124355396959168 | reset() called, finalized=False
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:147 | Thread-124355396959168 | ProfileMeasureTool deactivated
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-124355396959168 | create_drillhole_trace_layer called with 1 holes
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:393 | Thread-124355396959168 | Adding 1 drillhole trace features to layer
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-124355396959168 | create_drillhole_trace_layer called with 1 holes
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:393 | Thread-124355396959168 | Adding 1 drillhole trace features to layer
2026-01-15 14:25:05 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-124355396959168 | Failed to create memory layer: Fail
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-124355396959168 | create_drillhole_trace_layer called with 0 holes
2026-01-15 14:25:05 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-124355396959168 | No drillhole data provided for trace layer
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-124355396959168 | create_drillhole_trace_layer called with 1 holes
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:380 | Thread-124355396959168 | Skipping hole H1: insufficient trace points (1)
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:393 | Thread-124355396959168 | Adding 0 drillhole trace features to layer
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-124355396959168 | create_drillhole_trace_layer called with 1 holes
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124355396959168 | render() called
2026-01-15 14:25:05 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:156 | Thread-124355396959168 | No valid layers to render
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124355396959168 | render() called
2026-01-15 14:25:05 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:221 | Thread-124355396959168 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 198, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124355396959168 | render() called
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124355396959168 | render() called
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124355396959168 | render() called
2026-01-15 14:25:05 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:156 | Thread-124355396959168 | No valid layers to render
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124355396959168 | render() called
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124355396959168 | render() called
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-124355396959168 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-124355396959168 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124355396959168 | CacheService initialized (Default TTL: 3600s)
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-124355396959168 | ProfileController initialized
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-124355396959168 | Loaded 0 interpretations from project
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: buffer_dist = 100.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dem_band = 1
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: scale = 50000.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: vert_exag = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dh_use_geom = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: interp_inherit_geol = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: interp_inherit_drill = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: show_topo = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: show_geol = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: show_struct = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: show_drillholes = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: show_interpretations = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: auto_lod = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: adaptive_sampling = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: max_points = 10000
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-124355396959168 | Settings loaded successfully from Project/Global config
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:564 | Thread-124355396959168 | Saved 1 interpretations to project
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124355396959168 | CacheService initialized (Default TTL: 3600s)
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-124355396959168 | ProfileController initialized
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-124355396959168 | Loaded 0 interpretations from project
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: buffer_dist = 100.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dem_band = 1
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: scale = 50000.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: vert_exag = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dh_use_geom = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: interp_inherit_geol = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: interp_inherit_drill = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: show_topo = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: show_geol = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: show_struct = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: show_drillholes = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: show_interpretations = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: auto_lod = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: adaptive_sampling = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: max_points = 10000
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-124355396959168 | Settings loaded successfully from Project/Global config
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:564 | Thread-124355396959168 | Saved 1 interpretations to project
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:564 | Thread-124355396959168 | Saved 0 interpretations to project
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124355396959168 | CacheService initialized (Default TTL: 3600s)
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-124355396959168 | ProfileController initialized
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-124355396959168 | Loaded 0 interpretations from project
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: buffer_dist = 100.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dem_band = 1
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: scale = 50000.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: vert_exag = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dh_use_geom = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: interp_inherit_geol = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: interp_inherit_drill = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: show_topo = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: show_geol = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: show_struct = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: show_drillholes = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: show_interpretations = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: auto_lod = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: adaptive_sampling = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: max_points = 10000
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-124355396959168 | Settings loaded successfully from Project/Global config
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-124355396959168 | Loaded 1 interpretations from project
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-124355396959168 | Point 1 added: 0.00, 0.00
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-124355396959168 | Point 2 added: 10.00, 10.00
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-124355396959168 | finalize_measurement called with 2 points
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-124355396959168 | Setting finalized = True
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-124355396959168 | Measurement finalized: 2 points, 14.14m total distance
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:298 | Thread-124355396959168 | Rubber band redrawn with final points only
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-124355396959168 | Switching to pan tool to stop measurement
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-124355396959168 | Pan tool activated - measurement should be frozen
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-124355396959168 | reset() called, finalized=True
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:159 | Thread-124355396959168 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-124355396959168 | Point 1 added: 0.00, 0.00
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-124355396959168 | Point 2 added: 100.00, 100.00
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-124355396959168 | Point 3 added: 200.00, 150.00
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124355396959168 | CacheService initialized (Default TTL: 3600s)
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-124355396959168 | ProfileController initialized
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-124355396959168 | Loaded 1 interpretations from project
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: buffer_dist = 100.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dem_band = 1
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: scale = 50000.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: vert_exag = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: dh_use_geom = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: interp_inherit_geol = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: interp_inherit_drill = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: show_topo = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: show_geol = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: show_struct = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: show_drillholes = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: show_interpretations = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: auto_lod = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: adaptive_sampling = True
2026-01-15 14:25:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-124355396959168 | Global setting fallback: max_points = 10000
2026-01-15 14:25:05 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-124355396959168 | Settings loaded successfully from Project/Global config
2026-01-15 15:50:37 | DEBUG    | SecInterp | setup_logging:142 | Thread-139442574580672 | Logging system initialized. Root Level: 10
2026-01-15 15:50:37 | DEBUG    | SecInterp | setup_logging:143 | Thread-139442574580672 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 15:50:55 | DEBUG    | SecInterp | setup_logging:142 | Thread-138572981390272 | Logging system initialized. Root Level: 10
2026-01-15 15:50:55 | DEBUG    | SecInterp | setup_logging:143 | Thread-138572981390272 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 15:50:55 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-138572981390272 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 15:50:55 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-138572981390272 | No collars found within buffer area.
2026-01-15 15:50:55 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-138572981390272 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 15:50:55 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-138572981390272 | DrillholeService.project_collars END: Found 1 collars.
2026-01-15 16:28:56 | DEBUG    | SecInterp | setup_logging:144 | Thread-127542918011840 | Logging system initialized. Root Level: 10
2026-01-15 16:28:56 | DEBUG    | SecInterp | setup_logging:145 | Thread-127542918011840 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 16:39:29 | DEBUG    | SecInterp | setup_logging:142 | Thread-124516043459520 | Logging system initialized. Root Level: 10
2026-01-15 16:39:29 | DEBUG    | SecInterp | setup_logging:143 | Thread-124516043459520 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-124516043459520 | Configuration reset to defaults initiated
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124516043459520 | Config set: SecInterp/scale = 50000.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124516043459520 | Config set: SecInterp/vert_exag = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124516043459520 | Config set: SecInterp/buffer_dist = 100.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124516043459520 | Config set: SecInterp/show_topo = True
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124516043459520 | Config set: SecInterp/show_geol = True
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124516043459520 | Config set: SecInterp/show_struct = True
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124516043459520 | Config set: SecInterp/show_drillholes = True
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124516043459520 | Config set: SecInterp/show_interpretations = True
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124516043459520 | Config set: SecInterp/interp_inherit_geol = True
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124516043459520 | Config set: SecInterp/interp_inherit_drill = True
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124516043459520 | Config set: SecInterp/dh_use_geom = True
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124516043459520 | Config set: SecInterp/auto_lod = False
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124516043459520 | Config set: SecInterp/adaptive_sampling = True
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124516043459520 | Config set: SecInterp/max_points = 10000
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124516043459520 | Config set: SecInterp/dem_band = 1
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124516043459520 | Config set: SecInterp/scale = 200.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124516043459520 | Config set: SecInterp/scale = 20000.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124516043459520 | CacheService initialized (Default TTL: 3600s)
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124516043459520 | CacheService initialized (Default TTL: 3600s)
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124516043459520 | CacheService initialized (Default TTL: 3600s)
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-124516043459520 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-124516043459520 | No collars found within buffer area.
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-124516043459520 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-124516043459520 | DrillholeService.project_collars END: Found 1 collars.
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-124516043459520 | ✓ Saving profile axes...
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-124516043459520 | ✓ Saving topographic profile...
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-124516043459520 | ✓ Saving profile axes...
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-124516043459520 | ✓ Saving interpretation data...
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-124516043459520 | 3D Export features are restricted for this user.
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-124516043459520 | ✓ Saving topographic profile...
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-124516043459520 | ✓ Saving profile axes...
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-124516043459520 | ✓ Saving interpretation data...
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-124516043459520 | ✓ Saving 3D interpretation data...
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-124516043459520 | ✓ Saving topographic profile...
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-124516043459520 | ✓ Saving profile axes...
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-124516043459520 | ✓ Saving geological profile...
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-124516043459520 | ✓ Saving structural profile...
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-124516043459520 | ✓ Saving drillhole data...
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-124516043459520 | ✓ Saving interpretation data...
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-124516043459520 | Access denied for restricted feature: 3D Export
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-124516043459520 | 3D Export features are restricted for this user.
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-124516043459520 | ✓ Saving topographic profile...
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-124516043459520 | ✓ Saving profile axes...
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-124516043459520 | No interpretations provided for export.
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-124516043459520 | ✓ Saving drillhole data...
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-124516043459520 | ✓ Saving geological profile...
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-124516043459520 | ✓ Saving interpretation data...
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-124516043459520 | ✓ Saving 3D interpretation data...
2026-01-15 16:39:30 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-124516043459520 | Invalid section line layer, skipping 3D export.
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-124516043459520 | ✓ Saving interpretation data...
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-124516043459520 | ✓ Saving structural profile...
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-124516043459520 | ✓ Saving topographic profile...
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-124516043459520 | Generating master profile with interval=10.00
2026-01-15 16:39:30 | INFO     | SecInterp.performance | measure_operation:244 | Thread-124516043459520 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0034, 'memory_mb': 0.0, 'memory_peak_mb': 0.13, 'timestamp': '2026-01-15 16:39:30', 'args_count': 5, 'kwargs_keys': []}
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-124516043459520 | Generating master profile with interval=50.00
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-124516043459520 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-124516043459520 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-124516043459520 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-124516043459520 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-124516043459520 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-124516043459520 | Running geometry operation: test
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-124516043459520 | Generated 1 drillhole traces
2026-01-15 16:39:30 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-124516043459520 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 16:39:30 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:251 | Thread-124516043459520 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-124516043459520 | Generated 1 drillhole traces
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:171 | Thread-124516043459520 | Drillhole preview skipped: No Collar ID field selected.
2026-01-15 16:39:30 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-124516043459520 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 16:39:30 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-124516043459520 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 16:39:30 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-124516043459520 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 16:39:30 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-124516043459520 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 16:39:30 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-124516043459520 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-124516043459520 | Analyzing structures in Structure Layer with buffer 10m
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-124516043459520 | Processed 1 structural measurements from Structure Layer
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-124516043459520 | Successfully exported to /tmp/test_dynamic.shp
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-124516043459520 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-124516043459520 | Generated QML style: /tmp/test.qml
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-124516043459520 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-124516043459520 | Generated QML style: dummy.qml
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-124516043459520 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-124516043459520 | Generated QML style: dummy.qml
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-124516043459520 | Loaded 0 interpretations from project
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:369 | Thread-124516043459520 | Inherited attributes from geology: GeologyUnit
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-124516043459520 | Loaded 0 interpretations from project
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: section_layer = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: section_layer_name = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-124516043459520 | Failed to restore layer for section_layer
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: buffer_dist = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dem_layer = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dem_layer_name = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-124516043459520 | Failed to restore layer for dem_layer
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dem_band = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: scale = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: vert_exag = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: geol_layer = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: geol_layer_name = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-124516043459520 | Failed to restore layer for geol_layer
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: geol_field = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: struct_layer = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: struct_layer_name = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-124516043459520 | Failed to restore layer for struct_layer
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: struct_dip_field = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: struct_strike_field = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dh_collar_layer = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-124516043459520 | Failed to restore layer for dh_collar_layer
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dh_collar_id = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dh_use_geom = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dh_collar_x = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dh_collar_y = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dh_collar_z = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dh_collar_depth = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dh_survey_layer = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-124516043459520 | Failed to restore layer for dh_survey_layer
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dh_survey_id = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dh_survey_depth = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dh_survey_azim = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dh_survey_incl = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dh_interval_layer = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-124516043459520 | Failed to restore layer for dh_interval_layer
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dh_interval_id = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dh_interval_from = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dh_interval_to = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dh_interval_lith = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: last_output_dir = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: interp_custom_fields = 1.0
2026-01-15 16:39:30 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-124516043459520 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: show_topo = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: show_geol = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: show_struct = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: show_drillholes = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: show_interpretations = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: auto_lod = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: adaptive_sampling = 1.0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: max_points = 1.0
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-124516043459520 | Settings loaded successfully from Project/Global config
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:477 | Thread-124516043459520 | Cache cleared by user
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-124516043459520 | GeologyGenerationTask started (Background Thread)
2026-01-15 16:39:30 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-124516043459520 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-124516043459520 | GeologyGenerationTask started (Background Thread)
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-124516043459520 | GeologyGenerationTask finished with 1 segments
2026-01-15 16:39:30 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-124516043459520 | Test Title: Test Message
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-124516043459520 | Test Title: Test Message
2026-01-15 16:39:30 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-124516043459520 | Test Title: Test Message
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-124516043459520 | CRITICAL_OP: finalize_polygon | points=2
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-124516043459520 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-15 16:39:30 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-124516043459520 | finalize_polygon() aborted - less than 3 points
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-124516043459520 | CRITICAL_OP: finalize_polygon | points=3
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-124516043459520 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-124516043459520 | finalize_polygon() - emitting polygonFinished signal for e420040a-a4f1-490a-afe1-aae2bbd43b22
2026-01-15 16:39:30 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-124516043459520 | Interpretation polygon finalized with 3 vertices, ID: e420040a-a4f1-490a-afe1-aae2bbd43b22
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-124516043459520 | finalize_polygon() completed
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-124516043459520 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-124516043459520 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-124516043459520 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-124516043459520 | ProfileInterpretationTool.reset() completed
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-124516043459520 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-124516043459520 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-124516043459520 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 16:39:30 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-124516043459520 | ProfileInterpretationTool.reset() completed
2026-01-15 16:39:30 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-124516043459520 | Failed to create locator for layer layer1: mock error
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-124516043459520 | ProfileInterpretationTool.activate() called
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-124516043459520 | ProfileInterpretationTool activated successfully
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-124516043459520 | ProfileInterpretationTool.deactivate() called
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-124516043459520 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-124516043459520 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-124516043459520 | ProfileInterpretationTool.reset() completed
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-124516043459520 | ProfileInterpretationTool deactivated successfully
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: buffer_dist = 100.5
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-124516043459520 | Persistent interpretations cleared by reset
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-124516043459520 | Setting saved to project: test_layer = id_123
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-124516043459520 | Setting saved to project: test_layer_name = RealName
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: test_layer = 1.0
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-124516043459520 | Project setting hit: test_layer_name = RealName
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-124516043459520 | Restoring layer: test_layer -> RealName
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-124516043459520 | Point 1 added: 0.00, 0.00
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-124516043459520 | Point 2 added: 100.00, 100.00
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-124516043459520 | Point 1 added: 50.00, 50.00
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-124516043459520 | reset() called, finalized=False
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124516043459520 | finalize_measurement called with 1 points
2026-01-15 16:39:31 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-124516043459520 | Cannot finalize measurement with less than 2 points
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124516043459520 | finalize_measurement called with 2 points
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-124516043459520 | Setting finalized = True
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-124516043459520 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-124516043459520 | Switching to pan tool to stop measurement
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-124516043459520 | Pan tool activated - measurement should be frozen
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-124516043459520 | Ignoring click - measurement is finalized
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124516043459520 | finalize_measurement called with 2 points
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-124516043459520 | Setting finalized = True
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-124516043459520 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-124516043459520 | Switching to pan tool to stop measurement
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-124516043459520 | Pan tool activated - measurement should be frozen
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-124516043459520 | reset() called, finalized=False
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-124516043459520 | reset() called, finalized=False
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-124516043459520 | reset() called, finalized=True
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-124516043459520 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-124516043459520 | reset() called, finalized=False
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124516043459520 | finalize_measurement called with 2 points
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-124516043459520 | Setting finalized = True
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-124516043459520 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-124516043459520 | Rubber band redrawn with final points only
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-124516043459520 | Switching to pan tool to stop measurement
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-124516043459520 | Pan tool activated - measurement should be frozen
2026-01-15 16:39:31 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-124516043459520 | Failed to create locator for layer layer1: mock error
2026-01-15 16:39:31 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-124516043459520 | Failed to create locator for layer l2: fail
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-124516043459520 | ProfileMeasureTool activated
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-124516043459520 | reset() called, finalized=False
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-124516043459520 | ProfileMeasureTool deactivated
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124516043459520 | create_drillhole_trace_layer called with 1 holes
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-124516043459520 | Adding 1 drillhole trace features to layer
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124516043459520 | create_drillhole_trace_layer called with 1 holes
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-124516043459520 | Adding 1 drillhole trace features to layer
2026-01-15 16:39:31 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-124516043459520 | Failed to create memory layer: Fail
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124516043459520 | create_drillhole_trace_layer called with 0 holes
2026-01-15 16:39:31 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-124516043459520 | No drillhole data provided for trace layer
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124516043459520 | create_drillhole_trace_layer called with 1 holes
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-124516043459520 | Skipping hole H1: insufficient trace points (1)
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-124516043459520 | Adding 0 drillhole trace features to layer
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124516043459520 | create_drillhole_trace_layer called with 1 holes
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124516043459520 | render() called
2026-01-15 16:39:31 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-124516043459520 | No valid layers to render
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124516043459520 | render() called
2026-01-15 16:39:31 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-124516043459520 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124516043459520 | render() called
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124516043459520 | render() called
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124516043459520 | render() called
2026-01-15 16:39:31 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-124516043459520 | No valid layers to render
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124516043459520 | render() called
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124516043459520 | render() called
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-124516043459520 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-124516043459520 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124516043459520 | CacheService initialized (Default TTL: 3600s)
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-124516043459520 | ProfileController initialized
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-124516043459520 | Loaded 0 interpretations from project
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: buffer_dist = 100.0
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dem_band = 1
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: scale = 50000.0
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: vert_exag = 1.0
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dh_use_geom = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: interp_inherit_geol = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: interp_inherit_drill = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: show_topo = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: show_geol = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: show_struct = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: show_drillholes = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: show_interpretations = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: auto_lod = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: adaptive_sampling = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: max_points = 10000
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-124516043459520 | Settings loaded successfully from Project/Global config
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-124516043459520 | Saved 1 interpretations to project
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124516043459520 | CacheService initialized (Default TTL: 3600s)
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-124516043459520 | ProfileController initialized
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-124516043459520 | Loaded 0 interpretations from project
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: buffer_dist = 100.0
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dem_band = 1
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: scale = 50000.0
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: vert_exag = 1.0
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dh_use_geom = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: interp_inherit_geol = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: interp_inherit_drill = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: show_topo = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: show_geol = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: show_struct = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: show_drillholes = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: show_interpretations = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: auto_lod = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: adaptive_sampling = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: max_points = 10000
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-124516043459520 | Settings loaded successfully from Project/Global config
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-124516043459520 | Saved 1 interpretations to project
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-124516043459520 | Saved 0 interpretations to project
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124516043459520 | CacheService initialized (Default TTL: 3600s)
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-124516043459520 | ProfileController initialized
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-124516043459520 | Loaded 0 interpretations from project
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: buffer_dist = 100.0
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dem_band = 1
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: scale = 50000.0
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: vert_exag = 1.0
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dh_use_geom = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: interp_inherit_geol = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: interp_inherit_drill = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: show_topo = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: show_geol = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: show_struct = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: show_drillholes = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: show_interpretations = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: auto_lod = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: adaptive_sampling = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: max_points = 10000
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-124516043459520 | Settings loaded successfully from Project/Global config
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-124516043459520 | Loaded 1 interpretations from project
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-124516043459520 | Point 1 added: 0.00, 0.00
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-124516043459520 | Point 2 added: 10.00, 10.00
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124516043459520 | finalize_measurement called with 2 points
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-124516043459520 | Setting finalized = True
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-124516043459520 | Measurement finalized: 2 points, 14.14m total distance
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-124516043459520 | Rubber band redrawn with final points only
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-124516043459520 | Switching to pan tool to stop measurement
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-124516043459520 | Pan tool activated - measurement should be frozen
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-124516043459520 | reset() called, finalized=True
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-124516043459520 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-124516043459520 | Point 1 added: 0.00, 0.00
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-124516043459520 | Point 2 added: 100.00, 100.00
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-124516043459520 | Point 3 added: 200.00, 150.00
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124516043459520 | CacheService initialized (Default TTL: 3600s)
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-124516043459520 | ProfileController initialized
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-124516043459520 | Loaded 1 interpretations from project
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: buffer_dist = 100.0
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dem_band = 1
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: scale = 50000.0
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: vert_exag = 1.0
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: dh_use_geom = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: interp_inherit_geol = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: interp_inherit_drill = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: show_topo = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: show_geol = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: show_struct = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: show_drillholes = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: show_interpretations = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: auto_lod = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: adaptive_sampling = True
2026-01-15 16:39:31 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124516043459520 | Global setting fallback: max_points = 10000
2026-01-15 16:39:31 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-124516043459520 | Settings loaded successfully from Project/Global config
2026-01-15 17:07:18 | DEBUG    | SecInterp | setup_logging:142 | Thread-131704107465664 | Logging system initialized. Root Level: 10
2026-01-15 17:07:18 | DEBUG    | SecInterp | setup_logging:143 | Thread-131704107465664 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 17:35:40 | DEBUG    | SecInterp | setup_logging:142 | Thread-135141478964160 | Logging system initialized. Root Level: 10
2026-01-15 17:35:40 | DEBUG    | SecInterp | setup_logging:143 | Thread-135141478964160 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-135141478964160 | Configuration reset to defaults initiated
2026-01-15 17:35:40 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135141478964160 | Config set: SecInterp/scale = 50000.0
2026-01-15 17:35:40 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135141478964160 | Config set: SecInterp/vert_exag = 1.0
2026-01-15 17:35:40 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135141478964160 | Config set: SecInterp/buffer_dist = 100.0
2026-01-15 17:35:40 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135141478964160 | Config set: SecInterp/show_topo = True
2026-01-15 17:35:40 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135141478964160 | Config set: SecInterp/show_geol = True
2026-01-15 17:35:40 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135141478964160 | Config set: SecInterp/show_struct = True
2026-01-15 17:35:40 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135141478964160 | Config set: SecInterp/show_drillholes = True
2026-01-15 17:35:40 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135141478964160 | Config set: SecInterp/show_interpretations = True
2026-01-15 17:35:40 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135141478964160 | Config set: SecInterp/interp_inherit_geol = True
2026-01-15 17:35:40 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135141478964160 | Config set: SecInterp/interp_inherit_drill = True
2026-01-15 17:35:40 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135141478964160 | Config set: SecInterp/dh_use_geom = True
2026-01-15 17:35:40 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135141478964160 | Config set: SecInterp/auto_lod = False
2026-01-15 17:35:40 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135141478964160 | Config set: SecInterp/adaptive_sampling = True
2026-01-15 17:35:40 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135141478964160 | Config set: SecInterp/max_points = 10000
2026-01-15 17:35:40 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135141478964160 | Config set: SecInterp/dem_band = 1
2026-01-15 17:35:40 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135141478964160 | Config set: SecInterp/scale = 200.0
2026-01-15 17:35:40 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135141478964160 | Config set: SecInterp/scale = 20000.0
2026-01-15 17:35:40 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135141478964160 | CacheService initialized (Default TTL: 3600s)
2026-01-15 17:35:40 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135141478964160 | CacheService initialized (Default TTL: 3600s)
2026-01-15 17:35:40 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135141478964160 | CacheService initialized (Default TTL: 3600s)
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-135141478964160 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-135141478964160 | No collars found within buffer area.
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-135141478964160 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-135141478964160 | DrillholeService.project_collars END: Found 1 collars.
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-135141478964160 | ✓ Saving profile axes...
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-135141478964160 | ✓ Saving topographic profile...
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-135141478964160 | ✓ Saving profile axes...
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-135141478964160 | ✓ Saving interpretation data...
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-135141478964160 | 3D Export features are restricted for this user.
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-135141478964160 | ✓ Saving topographic profile...
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-135141478964160 | ✓ Saving profile axes...
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-135141478964160 | ✓ Saving interpretation data...
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-135141478964160 | ✓ Saving 3D interpretation data...
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-135141478964160 | ✓ Saving topographic profile...
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-135141478964160 | ✓ Saving profile axes...
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-135141478964160 | ✓ Saving geological profile...
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-135141478964160 | ✓ Saving structural profile...
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-135141478964160 | ✓ Saving drillhole data...
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-135141478964160 | ✓ Saving interpretation data...
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-135141478964160 | Access denied for restricted feature: 3D Export
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-135141478964160 | 3D Export features are restricted for this user.
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-135141478964160 | ✓ Saving topographic profile...
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-135141478964160 | ✓ Saving profile axes...
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-135141478964160 | No interpretations provided for export.
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-135141478964160 | ✓ Saving drillhole data...
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-135141478964160 | ✓ Saving geological profile...
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-135141478964160 | ✓ Saving interpretation data...
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-135141478964160 | ✓ Saving 3D interpretation data...
2026-01-15 17:35:40 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-135141478964160 | Invalid section line layer, skipping 3D export.
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-135141478964160 | ✓ Saving interpretation data...
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-135141478964160 | ✓ Saving structural profile...
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-135141478964160 | ✓ Saving topographic profile...
2026-01-15 17:35:40 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-135141478964160 | Generating master profile with interval=10.00
2026-01-15 17:35:40 | INFO     | SecInterp.performance | measure_operation:244 | Thread-135141478964160 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0036, 'memory_mb': 0.0, 'memory_peak_mb': 0.13, 'timestamp': '2026-01-15 17:35:40', 'args_count': 5, 'kwargs_keys': []}
2026-01-15 17:35:40 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-135141478964160 | Generating master profile with interval=50.00
2026-01-15 17:35:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-135141478964160 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 17:35:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-135141478964160 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 17:35:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-135141478964160 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-15 17:35:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-135141478964160 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-15 17:35:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-135141478964160 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-15 17:35:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-135141478964160 | Running geometry operation: test
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-135141478964160 | Generated 1 drillhole traces
2026-01-15 17:35:40 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-135141478964160 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 17:35:40 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:251 | Thread-135141478964160 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-135141478964160 | Generated 1 drillhole traces
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:171 | Thread-135141478964160 | Drillhole preview skipped: No Collar ID field selected.
2026-01-15 17:35:40 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-135141478964160 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 17:35:40 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-135141478964160 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 17:35:40 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-135141478964160 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 17:35:40 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-135141478964160 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 17:35:40 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-135141478964160 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-135141478964160 | Analyzing structures in Structure Layer with buffer 10m
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-135141478964160 | Processed 1 structural measurements from Structure Layer
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-135141478964160 | Successfully exported to /tmp/test_dynamic.shp
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-135141478964160 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-135141478964160 | Generated QML style: /tmp/test.qml
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-135141478964160 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-135141478964160 | Generated QML style: dummy.qml
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-135141478964160 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-135141478964160 | Generated QML style: dummy.qml
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-135141478964160 | Loaded 0 interpretations from project
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:369 | Thread-135141478964160 | Inherited attributes from geology: GeologyUnit
2026-01-15 17:35:40 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-135141478964160 | Loaded 0 interpretations from project
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: section_layer = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: section_layer_name = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-135141478964160 | Failed to restore layer for section_layer
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: buffer_dist = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dem_layer = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dem_layer_name = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-135141478964160 | Failed to restore layer for dem_layer
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dem_band = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: scale = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: vert_exag = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: geol_layer = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: geol_layer_name = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-135141478964160 | Failed to restore layer for geol_layer
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: geol_field = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: struct_layer = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: struct_layer_name = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-135141478964160 | Failed to restore layer for struct_layer
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: struct_dip_field = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: struct_strike_field = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dh_collar_layer = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-135141478964160 | Failed to restore layer for dh_collar_layer
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dh_collar_id = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dh_use_geom = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dh_collar_x = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dh_collar_y = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dh_collar_z = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dh_collar_depth = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dh_survey_layer = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-135141478964160 | Failed to restore layer for dh_survey_layer
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dh_survey_id = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dh_survey_depth = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dh_survey_azim = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dh_survey_incl = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dh_interval_layer = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-135141478964160 | Failed to restore layer for dh_interval_layer
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dh_interval_id = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dh_interval_from = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dh_interval_to = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dh_interval_lith = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: last_output_dir = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: interp_custom_fields = 1.0
2026-01-15 17:35:41 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-135141478964160 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: show_topo = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: show_geol = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: show_struct = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: show_drillholes = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: show_interpretations = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: auto_lod = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: adaptive_sampling = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: max_points = 1.0
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-135141478964160 | Settings loaded successfully from Project/Global config
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:477 | Thread-135141478964160 | Cache cleared by user
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-135141478964160 | GeologyGenerationTask started (Background Thread)
2026-01-15 17:35:41 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-135141478964160 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-135141478964160 | GeologyGenerationTask started (Background Thread)
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-135141478964160 | GeologyGenerationTask finished with 1 segments
2026-01-15 17:35:41 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-135141478964160 | Test Title: Test Message
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-135141478964160 | Test Title: Test Message
2026-01-15 17:35:41 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-135141478964160 | Test Title: Test Message
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-135141478964160 | CRITICAL_OP: finalize_polygon | points=2
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-135141478964160 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-15 17:35:41 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-135141478964160 | finalize_polygon() aborted - less than 3 points
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-135141478964160 | CRITICAL_OP: finalize_polygon | points=3
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-135141478964160 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-135141478964160 | finalize_polygon() - emitting polygonFinished signal for 482b7e66-5d5b-485f-9e06-cc4372e4d634
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-135141478964160 | Interpretation polygon finalized with 3 vertices, ID: 482b7e66-5d5b-485f-9e06-cc4372e4d634
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-135141478964160 | finalize_polygon() completed
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-135141478964160 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-135141478964160 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-135141478964160 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-135141478964160 | ProfileInterpretationTool.reset() completed
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-135141478964160 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-135141478964160 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-135141478964160 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-135141478964160 | ProfileInterpretationTool.reset() completed
2026-01-15 17:35:41 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-135141478964160 | Failed to create locator for layer layer1: mock error
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-135141478964160 | ProfileInterpretationTool.activate() called
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-135141478964160 | ProfileInterpretationTool activated successfully
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-135141478964160 | ProfileInterpretationTool.deactivate() called
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-135141478964160 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-135141478964160 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-135141478964160 | ProfileInterpretationTool.reset() completed
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-135141478964160 | ProfileInterpretationTool deactivated successfully
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: buffer_dist = 100.5
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-135141478964160 | Persistent interpretations cleared by reset
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-135141478964160 | Setting saved to project: test_layer = id_123
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-135141478964160 | Setting saved to project: test_layer_name = RealName
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: test_layer = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-135141478964160 | Project setting hit: test_layer_name = RealName
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-135141478964160 | Restoring layer: test_layer -> RealName
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-135141478964160 | Point 1 added: 0.00, 0.00
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-135141478964160 | Point 2 added: 100.00, 100.00
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-135141478964160 | Point 1 added: 50.00, 50.00
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-135141478964160 | reset() called, finalized=False
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-135141478964160 | finalize_measurement called with 1 points
2026-01-15 17:35:41 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-135141478964160 | Cannot finalize measurement with less than 2 points
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-135141478964160 | finalize_measurement called with 2 points
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-135141478964160 | Setting finalized = True
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-135141478964160 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-135141478964160 | Switching to pan tool to stop measurement
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-135141478964160 | Pan tool activated - measurement should be frozen
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-135141478964160 | Ignoring click - measurement is finalized
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-135141478964160 | finalize_measurement called with 2 points
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-135141478964160 | Setting finalized = True
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-135141478964160 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-135141478964160 | Switching to pan tool to stop measurement
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-135141478964160 | Pan tool activated - measurement should be frozen
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-135141478964160 | reset() called, finalized=False
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-135141478964160 | reset() called, finalized=False
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-135141478964160 | reset() called, finalized=True
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-135141478964160 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-135141478964160 | reset() called, finalized=False
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-135141478964160 | finalize_measurement called with 2 points
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-135141478964160 | Setting finalized = True
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-135141478964160 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-135141478964160 | Rubber band redrawn with final points only
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-135141478964160 | Switching to pan tool to stop measurement
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-135141478964160 | Pan tool activated - measurement should be frozen
2026-01-15 17:35:41 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-135141478964160 | Failed to create locator for layer layer1: mock error
2026-01-15 17:35:41 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-135141478964160 | Failed to create locator for layer l2: fail
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-135141478964160 | ProfileMeasureTool activated
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-135141478964160 | reset() called, finalized=False
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-135141478964160 | ProfileMeasureTool deactivated
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-135141478964160 | create_drillhole_trace_layer called with 1 holes
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-135141478964160 | Adding 1 drillhole trace features to layer
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-135141478964160 | create_drillhole_trace_layer called with 1 holes
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-135141478964160 | Adding 1 drillhole trace features to layer
2026-01-15 17:35:41 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-135141478964160 | Failed to create memory layer: Fail
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-135141478964160 | create_drillhole_trace_layer called with 0 holes
2026-01-15 17:35:41 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-135141478964160 | No drillhole data provided for trace layer
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-135141478964160 | create_drillhole_trace_layer called with 1 holes
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-135141478964160 | Skipping hole H1: insufficient trace points (1)
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-135141478964160 | Adding 0 drillhole trace features to layer
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-135141478964160 | create_drillhole_trace_layer called with 1 holes
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-135141478964160 | render() called
2026-01-15 17:35:41 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-135141478964160 | No valid layers to render
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-135141478964160 | render() called
2026-01-15 17:35:41 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-135141478964160 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-135141478964160 | render() called
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-135141478964160 | render() called
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-135141478964160 | render() called
2026-01-15 17:35:41 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-135141478964160 | No valid layers to render
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-135141478964160 | render() called
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-135141478964160 | render() called
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-135141478964160 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-135141478964160 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135141478964160 | CacheService initialized (Default TTL: 3600s)
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-135141478964160 | ProfileController initialized
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-135141478964160 | Loaded 0 interpretations from project
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: buffer_dist = 100.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dem_band = 1
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: scale = 50000.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: vert_exag = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dh_use_geom = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: interp_inherit_geol = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: interp_inherit_drill = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: show_topo = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: show_geol = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: show_struct = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: show_drillholes = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: show_interpretations = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: auto_lod = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: adaptive_sampling = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: max_points = 10000
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-135141478964160 | Settings loaded successfully from Project/Global config
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-135141478964160 | Saved 1 interpretations to project
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135141478964160 | CacheService initialized (Default TTL: 3600s)
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-135141478964160 | ProfileController initialized
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-135141478964160 | Loaded 0 interpretations from project
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: buffer_dist = 100.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dem_band = 1
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: scale = 50000.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: vert_exag = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dh_use_geom = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: interp_inherit_geol = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: interp_inherit_drill = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: show_topo = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: show_geol = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: show_struct = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: show_drillholes = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: show_interpretations = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: auto_lod = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: adaptive_sampling = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: max_points = 10000
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-135141478964160 | Settings loaded successfully from Project/Global config
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-135141478964160 | Saved 1 interpretations to project
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-135141478964160 | Saved 0 interpretations to project
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135141478964160 | CacheService initialized (Default TTL: 3600s)
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-135141478964160 | ProfileController initialized
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-135141478964160 | Loaded 0 interpretations from project
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: buffer_dist = 100.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dem_band = 1
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: scale = 50000.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: vert_exag = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dh_use_geom = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: interp_inherit_geol = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: interp_inherit_drill = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: show_topo = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: show_geol = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: show_struct = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: show_drillholes = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: show_interpretations = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: auto_lod = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: adaptive_sampling = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: max_points = 10000
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-135141478964160 | Settings loaded successfully from Project/Global config
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-135141478964160 | Loaded 1 interpretations from project
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-135141478964160 | Point 1 added: 0.00, 0.00
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-135141478964160 | Point 2 added: 10.00, 10.00
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-135141478964160 | finalize_measurement called with 2 points
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-135141478964160 | Setting finalized = True
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-135141478964160 | Measurement finalized: 2 points, 14.14m total distance
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-135141478964160 | Rubber band redrawn with final points only
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-135141478964160 | Switching to pan tool to stop measurement
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-135141478964160 | Pan tool activated - measurement should be frozen
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-135141478964160 | reset() called, finalized=True
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-135141478964160 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-135141478964160 | Point 1 added: 0.00, 0.00
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-135141478964160 | Point 2 added: 100.00, 100.00
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-135141478964160 | Point 3 added: 200.00, 150.00
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135141478964160 | CacheService initialized (Default TTL: 3600s)
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-135141478964160 | ProfileController initialized
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-135141478964160 | Loaded 1 interpretations from project
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: buffer_dist = 100.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dem_band = 1
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: scale = 50000.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: vert_exag = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: dh_use_geom = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: interp_inherit_geol = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: interp_inherit_drill = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: show_topo = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: show_geol = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: show_struct = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: show_drillholes = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: show_interpretations = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: auto_lod = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: adaptive_sampling = True
2026-01-15 17:35:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135141478964160 | Global setting fallback: max_points = 10000
2026-01-15 17:35:41 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-135141478964160 | Settings loaded successfully from Project/Global config
2026-01-15 17:38:16 | DEBUG    | SecInterp | setup_logging:142 | Thread-123428274854848 | Logging system initialized. Root Level: 10
2026-01-15 17:38:16 | DEBUG    | SecInterp | setup_logging:143 | Thread-123428274854848 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 17:42:11 | DEBUG    | SecInterp | setup_logging:142 | Thread-126096006634432 | Logging system initialized. Root Level: 10
2026-01-15 17:42:11 | DEBUG    | SecInterp | setup_logging:143 | Thread-126096006634432 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 17:42:43 | DEBUG    | SecInterp | setup_logging:142 | Thread-130697767553984 | Logging system initialized. Root Level: 10
2026-01-15 17:42:43 | DEBUG    | SecInterp | setup_logging:143 | Thread-130697767553984 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 17:43:09 | DEBUG    | SecInterp | setup_logging:142 | Thread-134038541949888 | Logging system initialized. Root Level: 10
2026-01-15 17:43:09 | DEBUG    | SecInterp | setup_logging:143 | Thread-134038541949888 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 17:49:13 | DEBUG    | SecInterp | setup_logging:144 | Thread-139726038055872 | Logging system initialized. Root Level: 10
2026-01-15 17:49:13 | DEBUG    | SecInterp | setup_logging:145 | Thread-139726038055872 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 17:49:13 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-139726038055872 | Configuration reset to defaults initiated
2026-01-15 17:49:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139726038055872 | Config set: SecInterp/scale = 50000.0
2026-01-15 17:49:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139726038055872 | Config set: SecInterp/vert_exag = 1.0
2026-01-15 17:49:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139726038055872 | Config set: SecInterp/buffer_dist = 100.0
2026-01-15 17:49:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139726038055872 | Config set: SecInterp/show_topo = True
2026-01-15 17:49:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139726038055872 | Config set: SecInterp/show_geol = True
2026-01-15 17:49:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139726038055872 | Config set: SecInterp/show_struct = True
2026-01-15 17:49:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139726038055872 | Config set: SecInterp/show_drillholes = True
2026-01-15 17:49:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139726038055872 | Config set: SecInterp/show_interpretations = True
2026-01-15 17:49:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139726038055872 | Config set: SecInterp/interp_inherit_geol = True
2026-01-15 17:49:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139726038055872 | Config set: SecInterp/interp_inherit_drill = True
2026-01-15 17:49:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139726038055872 | Config set: SecInterp/dh_use_geom = True
2026-01-15 17:49:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139726038055872 | Config set: SecInterp/auto_lod = False
2026-01-15 17:49:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139726038055872 | Config set: SecInterp/adaptive_sampling = True
2026-01-15 17:49:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139726038055872 | Config set: SecInterp/max_points = 10000
2026-01-15 17:49:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139726038055872 | Config set: SecInterp/dem_band = 1
2026-01-15 17:49:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139726038055872 | Config set: SecInterp/scale = 200.0
2026-01-15 17:49:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139726038055872 | Config set: SecInterp/scale = 20000.0
2026-01-15 17:49:13 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139726038055872 | CacheService initialized (Default TTL: 3600s)
2026-01-15 17:49:13 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139726038055872 | CacheService initialized (Default TTL: 3600s)
2026-01-15 17:49:13 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139726038055872 | CacheService initialized (Default TTL: 3600s)
2026-01-15 17:49:13 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-139726038055872 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 17:49:13 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:96 | Thread-139726038055872 | No collars found within buffer area.
2026-01-15 17:49:13 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-139726038055872 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 17:49:13 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:117 | Thread-139726038055872 | DrillholeService.project_collars END: Found 1 collars.
2026-01-15 17:49:13 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-139726038055872 | ✓ Saving profile axes...
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-139726038055872 | ✓ Saving topographic profile...
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-139726038055872 | ✓ Saving profile axes...
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-139726038055872 | ✓ Saving interpretation data...
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:324 | Thread-139726038055872 | 3D Export features are restricted for this user.
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-139726038055872 | ✓ Saving topographic profile...
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-139726038055872 | ✓ Saving profile axes...
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-139726038055872 | ✓ Saving interpretation data...
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:307 | Thread-139726038055872 | ✓ Saving 3D interpretation data...
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-139726038055872 | ✓ Saving topographic profile...
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-139726038055872 | ✓ Saving profile axes...
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:150 | Thread-139726038055872 | ✓ Saving geological profile...
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:178 | Thread-139726038055872 | ✓ Saving structural profile...
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:221 | Thread-139726038055872 | ✓ Saving drillhole data...
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-139726038055872 | ✓ Saving interpretation data...
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-139726038055872 | Access denied for restricted feature: 3D Export
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:324 | Thread-139726038055872 | 3D Export features are restricted for this user.
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-139726038055872 | ✓ Saving topographic profile...
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-139726038055872 | ✓ Saving profile axes...
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-139726038055872 | No interpretations provided for export.
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:221 | Thread-139726038055872 | ✓ Saving drillhole data...
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:150 | Thread-139726038055872 | ✓ Saving geological profile...
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-139726038055872 | ✓ Saving interpretation data...
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:307 | Thread-139726038055872 | ✓ Saving 3D interpretation data...
2026-01-15 17:49:14 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:322 | Thread-139726038055872 | Invalid section line layer, skipping 3D export.
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-139726038055872 | ✓ Saving interpretation data...
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:178 | Thread-139726038055872 | ✓ Saving structural profile...
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-139726038055872 | ✓ Saving topographic profile...
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:304 | Thread-139726038055872 | Generating master profile with interval=10.00
2026-01-15 17:49:14 | INFO     | SecInterp.performance | measure_operation:244 | Thread-139726038055872 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0032, 'memory_mb': 0.0, 'memory_peak_mb': 0.13, 'timestamp': '2026-01-15 17:49:14', 'args_count': 5, 'kwargs_keys': []}
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:304 | Thread-139726038055872 | Generating master profile with interval=50.00
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:61 | Thread-139726038055872 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:61 | Thread-139726038055872 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-139726038055872 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-139726038055872 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-139726038055872 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-139726038055872 | Running geometry operation: test
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:264 | Thread-139726038055872 | Generated 1 drillhole traces
2026-01-15 17:49:14 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:256 | Thread-139726038055872 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 238, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 17:49:14 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:261 | Thread-139726038055872 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 238, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 238, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:264 | Thread-139726038055872 | Generated 1 drillhole traces
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:177 | Thread-139726038055872 | Drillhole preview skipped: No Collar ID field selected.
2026-01-15 17:49:14 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-139726038055872 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 17:49:14 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-139726038055872 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 17:49:14 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:196 | Thread-139726038055872 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 191, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 17:49:14 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:321 | Thread-139726038055872 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 314, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 191, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 17:49:14 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:156 | Thread-139726038055872 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 154, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-139726038055872 | Analyzing structures in Structure Layer with buffer 10m
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:128 | Thread-139726038055872 | Processed 1 structural measurements from Structure Layer
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:149 | Thread-139726038055872 | Successfully exported to /tmp/test_dynamic.shp
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-139726038055872 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:135 | Thread-139726038055872 | Generated QML style: /tmp/test.qml
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-139726038055872 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:135 | Thread-139726038055872 | Generated QML style: dummy.qml
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-139726038055872 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:135 | Thread-139726038055872 | Generated QML style: dummy.qml
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-139726038055872 | Loaded 0 interpretations from project
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:381 | Thread-139726038055872 | Inherited attributes from geology: GeologyUnit
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-139726038055872 | Loaded 0 interpretations from project
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: section_layer = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: section_layer_name = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-139726038055872 | Failed to restore layer for section_layer
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: buffer_dist = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dem_layer = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dem_layer_name = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-139726038055872 | Failed to restore layer for dem_layer
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dem_band = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: scale = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: vert_exag = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: geol_layer = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: geol_layer_name = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-139726038055872 | Failed to restore layer for geol_layer
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: geol_field = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: struct_layer = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: struct_layer_name = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-139726038055872 | Failed to restore layer for struct_layer
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: struct_dip_field = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: struct_strike_field = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dh_collar_layer = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-139726038055872 | Failed to restore layer for dh_collar_layer
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dh_collar_id = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dh_use_geom = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dh_collar_x = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dh_collar_y = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dh_collar_z = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dh_collar_depth = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dh_survey_layer = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-139726038055872 | Failed to restore layer for dh_survey_layer
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dh_survey_id = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dh_survey_depth = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dh_survey_azim = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dh_survey_incl = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dh_interval_layer = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-139726038055872 | Failed to restore layer for dh_interval_layer
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dh_interval_id = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dh_interval_from = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dh_interval_to = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dh_interval_lith = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: last_output_dir = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: interp_custom_fields = 1.0
2026-01-15 17:49:14 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:172 | Thread-139726038055872 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: show_topo = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: show_geol = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: show_struct = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: show_drillholes = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: show_interpretations = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: auto_lod = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: adaptive_sampling = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: max_points = 1.0
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-139726038055872 | Settings loaded successfully from Project/Global config
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:497 | Thread-139726038055872 | Cache cleared by user
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-139726038055872 | GeologyGenerationTask started (Background Thread)
2026-01-15 17:49:14 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:63 | Thread-139726038055872 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-139726038055872 | GeologyGenerationTask started (Background Thread)
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-139726038055872 | GeologyGenerationTask finished with 1 segments
2026-01-15 17:49:14 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-139726038055872 | Test Title: Test Message
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-139726038055872 | Test Title: Test Message
2026-01-15 17:49:14 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-139726038055872 | Test Title: Test Message
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-139726038055872 | CRITICAL_OP: finalize_polygon | points=2
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-139726038055872 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-15 17:49:14 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-139726038055872 | finalize_polygon() aborted - less than 3 points
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-139726038055872 | CRITICAL_OP: finalize_polygon | points=3
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-139726038055872 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:333 | Thread-139726038055872 | finalize_polygon() - emitting polygonFinished signal for 960e5b10-5ddd-4efd-a204-c6e39b1b9a85
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:339 | Thread-139726038055872 | Interpretation polygon finalized with 3 vertices, ID: 960e5b10-5ddd-4efd-a204-c6e39b1b9a85
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:342 | Thread-139726038055872 | finalize_polygon() completed
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-139726038055872 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-139726038055872 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-139726038055872 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-139726038055872 | ProfileInterpretationTool.reset() completed
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-139726038055872 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-139726038055872 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-139726038055872 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-139726038055872 | ProfileInterpretationTool.reset() completed
2026-01-15 17:49:14 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:111 | Thread-139726038055872 | Failed to create locator for layer layer1: mock error
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:142 | Thread-139726038055872 | ProfileInterpretationTool.activate() called
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:145 | Thread-139726038055872 | ProfileInterpretationTool activated successfully
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:150 | Thread-139726038055872 | ProfileInterpretationTool.deactivate() called
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-139726038055872 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-139726038055872 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-139726038055872 | ProfileInterpretationTool.reset() completed
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:153 | Thread-139726038055872 | ProfileInterpretationTool deactivated successfully
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: buffer_dist = 100.5
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:353 | Thread-139726038055872 | Persistent interpretations cleared by reset
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:405 | Thread-139726038055872 | Setting saved to project: test_layer = id_123
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:405 | Thread-139726038055872 | Setting saved to project: test_layer_name = RealName
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: test_layer = 1.0
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:385 | Thread-139726038055872 | Project setting hit: test_layer_name = RealName
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:442 | Thread-139726038055872 | Restoring layer: test_layer -> RealName
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-139726038055872 | Point 1 added: 0.00, 0.00
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-139726038055872 | Point 2 added: 100.00, 100.00
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-139726038055872 | Point 1 added: 50.00, 50.00
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-139726038055872 | reset() called, finalized=False
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-139726038055872 | finalize_measurement called with 1 points
2026-01-15 17:49:14 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:275 | Thread-139726038055872 | Cannot finalize measurement with less than 2 points
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-139726038055872 | finalize_measurement called with 2 points
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-139726038055872 | Setting finalized = True
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-139726038055872 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-139726038055872 | Switching to pan tool to stop measurement
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-139726038055872 | Pan tool activated - measurement should be frozen
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:202 | Thread-139726038055872 | Ignoring click - measurement is finalized
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-139726038055872 | finalize_measurement called with 2 points
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-139726038055872 | Setting finalized = True
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-139726038055872 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-139726038055872 | Switching to pan tool to stop measurement
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-139726038055872 | Pan tool activated - measurement should be frozen
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-139726038055872 | reset() called, finalized=False
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-139726038055872 | reset() called, finalized=False
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-139726038055872 | reset() called, finalized=True
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:159 | Thread-139726038055872 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-139726038055872 | reset() called, finalized=False
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-139726038055872 | finalize_measurement called with 2 points
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-139726038055872 | Setting finalized = True
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-139726038055872 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:298 | Thread-139726038055872 | Rubber band redrawn with final points only
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-139726038055872 | Switching to pan tool to stop measurement
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-139726038055872 | Pan tool activated - measurement should be frozen
2026-01-15 17:49:14 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:103 | Thread-139726038055872 | Failed to create locator for layer layer1: mock error
2026-01-15 17:49:14 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:103 | Thread-139726038055872 | Failed to create locator for layer l2: fail
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:141 | Thread-139726038055872 | ProfileMeasureTool activated
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-139726038055872 | reset() called, finalized=False
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:147 | Thread-139726038055872 | ProfileMeasureTool deactivated
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-139726038055872 | create_drillhole_trace_layer called with 1 holes
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:393 | Thread-139726038055872 | Adding 1 drillhole trace features to layer
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-139726038055872 | create_drillhole_trace_layer called with 1 holes
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:393 | Thread-139726038055872 | Adding 1 drillhole trace features to layer
2026-01-15 17:49:14 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-139726038055872 | Failed to create memory layer: Fail
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-139726038055872 | create_drillhole_trace_layer called with 0 holes
2026-01-15 17:49:14 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-139726038055872 | No drillhole data provided for trace layer
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-139726038055872 | create_drillhole_trace_layer called with 1 holes
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:380 | Thread-139726038055872 | Skipping hole H1: insufficient trace points (1)
2026-01-15 17:49:14 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:393 | Thread-139726038055872 | Adding 0 drillhole trace features to layer
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-139726038055872 | create_drillhole_trace_layer called with 1 holes
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139726038055872 | render() called
2026-01-15 17:49:14 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:156 | Thread-139726038055872 | No valid layers to render
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139726038055872 | render() called
2026-01-15 17:49:14 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:221 | Thread-139726038055872 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 198, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139726038055872 | render() called
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139726038055872 | render() called
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139726038055872 | render() called
2026-01-15 17:49:14 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:156 | Thread-139726038055872 | No valid layers to render
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139726038055872 | render() called
2026-01-15 17:49:14 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139726038055872 | render() called
2026-01-15 17:49:15 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-139726038055872 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-15 17:49:15 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-139726038055872 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139726038055872 | CacheService initialized (Default TTL: 3600s)
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-139726038055872 | ProfileController initialized
2026-01-15 17:49:15 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-139726038055872 | Loaded 0 interpretations from project
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: buffer_dist = 100.0
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dem_band = 1
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: scale = 50000.0
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: vert_exag = 1.0
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dh_use_geom = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: interp_inherit_geol = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: interp_inherit_drill = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: show_topo = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: show_geol = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: show_struct = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: show_drillholes = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: show_interpretations = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: auto_lod = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: adaptive_sampling = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: max_points = 10000
2026-01-15 17:49:15 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-139726038055872 | Settings loaded successfully from Project/Global config
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:564 | Thread-139726038055872 | Saved 1 interpretations to project
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139726038055872 | CacheService initialized (Default TTL: 3600s)
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-139726038055872 | ProfileController initialized
2026-01-15 17:49:15 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-139726038055872 | Loaded 0 interpretations from project
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: buffer_dist = 100.0
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dem_band = 1
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: scale = 50000.0
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: vert_exag = 1.0
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dh_use_geom = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: interp_inherit_geol = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: interp_inherit_drill = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: show_topo = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: show_geol = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: show_struct = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: show_drillholes = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: show_interpretations = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: auto_lod = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: adaptive_sampling = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: max_points = 10000
2026-01-15 17:49:15 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-139726038055872 | Settings loaded successfully from Project/Global config
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:564 | Thread-139726038055872 | Saved 1 interpretations to project
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:564 | Thread-139726038055872 | Saved 0 interpretations to project
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139726038055872 | CacheService initialized (Default TTL: 3600s)
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-139726038055872 | ProfileController initialized
2026-01-15 17:49:15 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-139726038055872 | Loaded 0 interpretations from project
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: buffer_dist = 100.0
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dem_band = 1
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: scale = 50000.0
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: vert_exag = 1.0
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dh_use_geom = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: interp_inherit_geol = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: interp_inherit_drill = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: show_topo = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: show_geol = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: show_struct = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: show_drillholes = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: show_interpretations = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: auto_lod = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: adaptive_sampling = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: max_points = 10000
2026-01-15 17:49:15 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-139726038055872 | Settings loaded successfully from Project/Global config
2026-01-15 17:49:15 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-139726038055872 | Loaded 1 interpretations from project
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-139726038055872 | Point 1 added: 0.00, 0.00
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-139726038055872 | Point 2 added: 10.00, 10.00
2026-01-15 17:49:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-139726038055872 | finalize_measurement called with 2 points
2026-01-15 17:49:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-139726038055872 | Setting finalized = True
2026-01-15 17:49:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-139726038055872 | Measurement finalized: 2 points, 14.14m total distance
2026-01-15 17:49:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:298 | Thread-139726038055872 | Rubber band redrawn with final points only
2026-01-15 17:49:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-139726038055872 | Switching to pan tool to stop measurement
2026-01-15 17:49:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-139726038055872 | Pan tool activated - measurement should be frozen
2026-01-15 17:49:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-139726038055872 | reset() called, finalized=True
2026-01-15 17:49:15 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:159 | Thread-139726038055872 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-139726038055872 | Point 1 added: 0.00, 0.00
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-139726038055872 | Point 2 added: 100.00, 100.00
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-139726038055872 | Point 3 added: 200.00, 150.00
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139726038055872 | CacheService initialized (Default TTL: 3600s)
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-139726038055872 | ProfileController initialized
2026-01-15 17:49:15 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-139726038055872 | Loaded 1 interpretations from project
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: buffer_dist = 100.0
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dem_band = 1
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: scale = 50000.0
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: vert_exag = 1.0
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: dh_use_geom = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: interp_inherit_geol = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: interp_inherit_drill = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: show_topo = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: show_geol = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: show_struct = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: show_drillholes = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: show_interpretations = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: auto_lod = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: adaptive_sampling = True
2026-01-15 17:49:15 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-139726038055872 | Global setting fallback: max_points = 10000
2026-01-15 17:49:15 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-139726038055872 | Settings loaded successfully from Project/Global config
2026-01-15 18:00:37 | DEBUG    | SecInterp | setup_logging:142 | Thread-124994905029568 | Logging system initialized. Root Level: 10
2026-01-15 18:00:37 | DEBUG    | SecInterp | setup_logging:143 | Thread-124994905029568 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 18:00:37 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-124994905029568 | Configuration reset to defaults initiated
2026-01-15 18:00:37 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124994905029568 | Config set: SecInterp/scale = 50000.0
2026-01-15 18:00:37 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124994905029568 | Config set: SecInterp/vert_exag = 1.0
2026-01-15 18:00:37 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124994905029568 | Config set: SecInterp/buffer_dist = 100.0
2026-01-15 18:00:37 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124994905029568 | Config set: SecInterp/show_topo = True
2026-01-15 18:00:37 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124994905029568 | Config set: SecInterp/show_geol = True
2026-01-15 18:00:37 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124994905029568 | Config set: SecInterp/show_struct = True
2026-01-15 18:00:37 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124994905029568 | Config set: SecInterp/show_drillholes = True
2026-01-15 18:00:37 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124994905029568 | Config set: SecInterp/show_interpretations = True
2026-01-15 18:00:37 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124994905029568 | Config set: SecInterp/interp_inherit_geol = True
2026-01-15 18:00:37 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124994905029568 | Config set: SecInterp/interp_inherit_drill = True
2026-01-15 18:00:37 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124994905029568 | Config set: SecInterp/dh_use_geom = True
2026-01-15 18:00:37 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124994905029568 | Config set: SecInterp/auto_lod = False
2026-01-15 18:00:37 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124994905029568 | Config set: SecInterp/adaptive_sampling = True
2026-01-15 18:00:37 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124994905029568 | Config set: SecInterp/max_points = 10000
2026-01-15 18:00:37 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124994905029568 | Config set: SecInterp/dem_band = 1
2026-01-15 18:00:37 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124994905029568 | Config set: SecInterp/scale = 200.0
2026-01-15 18:00:37 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124994905029568 | Config set: SecInterp/scale = 20000.0
2026-01-15 18:00:37 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124994905029568 | CacheService initialized (Default TTL: 3600s)
2026-01-15 18:00:37 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124994905029568 | CacheService initialized (Default TTL: 3600s)
2026-01-15 18:00:37 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124994905029568 | CacheService initialized (Default TTL: 3600s)
2026-01-15 18:00:37 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-124994905029568 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 18:00:37 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:92 | Thread-124994905029568 | No collars found within buffer area.
2026-01-15 18:00:37 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:77 | Thread-124994905029568 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 18:00:37 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:113 | Thread-124994905029568 | DrillholeService.project_collars END: Found 1 collars.
2026-01-15 18:00:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-124994905029568 | ✓ Saving profile axes...
2026-01-15 18:00:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-124994905029568 | ✓ Saving topographic profile...
2026-01-15 18:00:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-124994905029568 | ✓ Saving profile axes...
2026-01-15 18:00:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-124994905029568 | ✓ Saving interpretation data...
2026-01-15 18:00:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-124994905029568 | 3D Export features are restricted for this user.
2026-01-15 18:00:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-124994905029568 | ✓ Saving topographic profile...
2026-01-15 18:00:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-124994905029568 | ✓ Saving profile axes...
2026-01-15 18:00:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-124994905029568 | ✓ Saving interpretation data...
2026-01-15 18:00:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-124994905029568 | ✓ Saving 3D interpretation data...
2026-01-15 18:00:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-124994905029568 | ✓ Saving topographic profile...
2026-01-15 18:00:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-124994905029568 | ✓ Saving profile axes...
2026-01-15 18:00:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-124994905029568 | ✓ Saving geological profile...
2026-01-15 18:00:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-124994905029568 | ✓ Saving structural profile...
2026-01-15 18:00:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-124994905029568 | ✓ Saving drillhole data...
2026-01-15 18:00:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-124994905029568 | ✓ Saving interpretation data...
2026-01-15 18:00:37 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-124994905029568 | Access denied for restricted feature: 3D Export
2026-01-15 18:00:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-124994905029568 | 3D Export features are restricted for this user.
2026-01-15 18:00:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-124994905029568 | ✓ Saving topographic profile...
2026-01-15 18:00:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-124994905029568 | ✓ Saving profile axes...
2026-01-15 18:00:37 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-124994905029568 | No interpretations provided for export.
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-124994905029568 | ✓ Saving drillhole data...
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-124994905029568 | ✓ Saving geological profile...
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-124994905029568 | ✓ Saving interpretation data...
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-124994905029568 | ✓ Saving 3D interpretation data...
2026-01-15 18:00:38 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-124994905029568 | Invalid section line layer, skipping 3D export.
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-124994905029568 | ✓ Saving interpretation data...
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-124994905029568 | ✓ Saving structural profile...
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-124994905029568 | ✓ Saving topographic profile...
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-124994905029568 | Generating master profile with interval=10.00
2026-01-15 18:00:38 | INFO     | SecInterp.performance | measure_operation:244 | Thread-124994905029568 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.003, 'memory_mb': 0.0, 'memory_peak_mb': 0.13, 'timestamp': '2026-01-15 18:00:38', 'args_count': 5, 'kwargs_keys': []}
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:302 | Thread-124994905029568 | Generating master profile with interval=50.00
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-124994905029568 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-124994905029568 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-124994905029568 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-124994905029568 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-124994905029568 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-124994905029568 | Running geometry operation: test
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-124994905029568 | Generated 1 drillhole traces
2026-01-15 18:00:38 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-124994905029568 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 18:00:38 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:251 | Thread-124994905029568 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-124994905029568 | Generated 1 drillhole traces
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:171 | Thread-124994905029568 | Drillhole preview skipped: No Collar ID field selected.
2026-01-15 18:00:38 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-124994905029568 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 18:00:38 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-124994905029568 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 18:00:38 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-124994905029568 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 18:00:38 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-124994905029568 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 18:00:38 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-124994905029568 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-124994905029568 | Analyzing structures in Structure Layer with buffer 10m
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-124994905029568 | Processed 1 structural measurements from Structure Layer
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-124994905029568 | Successfully exported to /tmp/test_dynamic.shp
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-124994905029568 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-124994905029568 | Generated QML style: /tmp/test.qml
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-124994905029568 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-124994905029568 | Generated QML style: dummy.qml
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-124994905029568 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-124994905029568 | Generated QML style: dummy.qml
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-124994905029568 | Loaded 0 interpretations from project
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:369 | Thread-124994905029568 | Inherited attributes from geology: GeologyUnit
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-124994905029568 | Loaded 0 interpretations from project
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: section_layer = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: section_layer_name = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-124994905029568 | Failed to restore layer for section_layer
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: buffer_dist = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dem_layer = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dem_layer_name = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-124994905029568 | Failed to restore layer for dem_layer
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dem_band = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: scale = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: vert_exag = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: geol_layer = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: geol_layer_name = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-124994905029568 | Failed to restore layer for geol_layer
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: geol_field = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: struct_layer = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: struct_layer_name = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-124994905029568 | Failed to restore layer for struct_layer
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: struct_dip_field = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: struct_strike_field = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dh_collar_layer = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-124994905029568 | Failed to restore layer for dh_collar_layer
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dh_collar_id = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dh_use_geom = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dh_collar_x = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dh_collar_y = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dh_collar_z = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dh_collar_depth = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dh_survey_layer = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-124994905029568 | Failed to restore layer for dh_survey_layer
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dh_survey_id = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dh_survey_depth = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dh_survey_azim = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dh_survey_incl = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dh_interval_layer = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-124994905029568 | Failed to restore layer for dh_interval_layer
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dh_interval_id = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dh_interval_from = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dh_interval_to = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dh_interval_lith = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: last_output_dir = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: interp_custom_fields = 1.0
2026-01-15 18:00:38 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-124994905029568 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: show_topo = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: show_geol = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: show_struct = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: show_drillholes = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: show_interpretations = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: auto_lod = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: adaptive_sampling = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: max_points = 1.0
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-124994905029568 | Settings loaded successfully from Project/Global config
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:477 | Thread-124994905029568 | Cache cleared by user
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-124994905029568 | GeologyGenerationTask started (Background Thread)
2026-01-15 18:00:38 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-124994905029568 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-124994905029568 | GeologyGenerationTask started (Background Thread)
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-124994905029568 | GeologyGenerationTask finished with 1 segments
2026-01-15 18:00:38 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-124994905029568 | Test Title: Test Message
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-124994905029568 | Test Title: Test Message
2026-01-15 18:00:38 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-124994905029568 | Test Title: Test Message
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-124994905029568 | CRITICAL_OP: finalize_polygon | points=2
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-124994905029568 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-15 18:00:38 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-124994905029568 | finalize_polygon() aborted - less than 3 points
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-124994905029568 | CRITICAL_OP: finalize_polygon | points=3
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-124994905029568 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-124994905029568 | finalize_polygon() - emitting polygonFinished signal for 591a23ee-0243-4e0b-a280-52609c1f25ad
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-124994905029568 | Interpretation polygon finalized with 3 vertices, ID: 591a23ee-0243-4e0b-a280-52609c1f25ad
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-124994905029568 | finalize_polygon() completed
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-124994905029568 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-124994905029568 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-124994905029568 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-124994905029568 | ProfileInterpretationTool.reset() completed
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-124994905029568 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-124994905029568 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-124994905029568 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-124994905029568 | ProfileInterpretationTool.reset() completed
2026-01-15 18:00:38 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-124994905029568 | Failed to create locator for layer layer1: mock error
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-124994905029568 | ProfileInterpretationTool.activate() called
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-124994905029568 | ProfileInterpretationTool activated successfully
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-124994905029568 | ProfileInterpretationTool.deactivate() called
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-124994905029568 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-124994905029568 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-124994905029568 | ProfileInterpretationTool.reset() completed
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-124994905029568 | ProfileInterpretationTool deactivated successfully
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: buffer_dist = 100.5
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-124994905029568 | Persistent interpretations cleared by reset
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-124994905029568 | Setting saved to project: test_layer = id_123
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-124994905029568 | Setting saved to project: test_layer_name = RealName
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: test_layer = 1.0
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-124994905029568 | Project setting hit: test_layer_name = RealName
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-124994905029568 | Restoring layer: test_layer -> RealName
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-124994905029568 | Point 1 added: 0.00, 0.00
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-124994905029568 | Point 2 added: 100.00, 100.00
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-124994905029568 | Point 1 added: 50.00, 50.00
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-124994905029568 | reset() called, finalized=False
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124994905029568 | finalize_measurement called with 1 points
2026-01-15 18:00:38 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-124994905029568 | Cannot finalize measurement with less than 2 points
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124994905029568 | finalize_measurement called with 2 points
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-124994905029568 | Setting finalized = True
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-124994905029568 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-124994905029568 | Switching to pan tool to stop measurement
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-124994905029568 | Pan tool activated - measurement should be frozen
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-124994905029568 | Ignoring click - measurement is finalized
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124994905029568 | finalize_measurement called with 2 points
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-124994905029568 | Setting finalized = True
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-124994905029568 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-124994905029568 | Switching to pan tool to stop measurement
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-124994905029568 | Pan tool activated - measurement should be frozen
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-124994905029568 | reset() called, finalized=False
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-124994905029568 | reset() called, finalized=False
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-124994905029568 | reset() called, finalized=True
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-124994905029568 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-124994905029568 | reset() called, finalized=False
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124994905029568 | finalize_measurement called with 2 points
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-124994905029568 | Setting finalized = True
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-124994905029568 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-124994905029568 | Rubber band redrawn with final points only
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-124994905029568 | Switching to pan tool to stop measurement
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-124994905029568 | Pan tool activated - measurement should be frozen
2026-01-15 18:00:38 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-124994905029568 | Failed to create locator for layer layer1: mock error
2026-01-15 18:00:38 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-124994905029568 | Failed to create locator for layer l2: fail
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-124994905029568 | ProfileMeasureTool activated
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-124994905029568 | reset() called, finalized=False
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-124994905029568 | ProfileMeasureTool deactivated
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124994905029568 | create_drillhole_trace_layer called with 1 holes
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-124994905029568 | Adding 1 drillhole trace features to layer
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124994905029568 | create_drillhole_trace_layer called with 1 holes
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-124994905029568 | Adding 1 drillhole trace features to layer
2026-01-15 18:00:38 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-124994905029568 | Failed to create memory layer: Fail
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124994905029568 | create_drillhole_trace_layer called with 0 holes
2026-01-15 18:00:38 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-124994905029568 | No drillhole data provided for trace layer
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124994905029568 | create_drillhole_trace_layer called with 1 holes
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-124994905029568 | Skipping hole H1: insufficient trace points (1)
2026-01-15 18:00:38 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-124994905029568 | Adding 0 drillhole trace features to layer
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124994905029568 | create_drillhole_trace_layer called with 1 holes
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124994905029568 | render() called
2026-01-15 18:00:38 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-124994905029568 | No valid layers to render
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124994905029568 | render() called
2026-01-15 18:00:38 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-124994905029568 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124994905029568 | render() called
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124994905029568 | render() called
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124994905029568 | render() called
2026-01-15 18:00:38 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-124994905029568 | No valid layers to render
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124994905029568 | render() called
2026-01-15 18:00:38 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124994905029568 | render() called
2026-01-15 18:00:39 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-124994905029568 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-15 18:00:39 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-124994905029568 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124994905029568 | CacheService initialized (Default TTL: 3600s)
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-124994905029568 | ProfileController initialized
2026-01-15 18:00:39 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-124994905029568 | Loaded 0 interpretations from project
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: buffer_dist = 100.0
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dem_band = 1
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: scale = 50000.0
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: vert_exag = 1.0
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dh_use_geom = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: interp_inherit_geol = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: interp_inherit_drill = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: show_topo = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: show_geol = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: show_struct = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: show_drillholes = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: show_interpretations = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: auto_lod = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: adaptive_sampling = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: max_points = 10000
2026-01-15 18:00:39 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-124994905029568 | Settings loaded successfully from Project/Global config
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-124994905029568 | Saved 1 interpretations to project
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124994905029568 | CacheService initialized (Default TTL: 3600s)
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-124994905029568 | ProfileController initialized
2026-01-15 18:00:39 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-124994905029568 | Loaded 0 interpretations from project
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: buffer_dist = 100.0
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dem_band = 1
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: scale = 50000.0
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: vert_exag = 1.0
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dh_use_geom = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: interp_inherit_geol = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: interp_inherit_drill = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: show_topo = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: show_geol = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: show_struct = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: show_drillholes = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: show_interpretations = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: auto_lod = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: adaptive_sampling = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: max_points = 10000
2026-01-15 18:00:39 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-124994905029568 | Settings loaded successfully from Project/Global config
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-124994905029568 | Saved 1 interpretations to project
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-124994905029568 | Saved 0 interpretations to project
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124994905029568 | CacheService initialized (Default TTL: 3600s)
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-124994905029568 | ProfileController initialized
2026-01-15 18:00:39 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-124994905029568 | Loaded 0 interpretations from project
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: buffer_dist = 100.0
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dem_band = 1
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: scale = 50000.0
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: vert_exag = 1.0
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dh_use_geom = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: interp_inherit_geol = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: interp_inherit_drill = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: show_topo = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: show_geol = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: show_struct = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: show_drillholes = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: show_interpretations = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: auto_lod = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: adaptive_sampling = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: max_points = 10000
2026-01-15 18:00:39 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-124994905029568 | Settings loaded successfully from Project/Global config
2026-01-15 18:00:39 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-124994905029568 | Loaded 1 interpretations from project
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-124994905029568 | Point 1 added: 0.00, 0.00
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-124994905029568 | Point 2 added: 10.00, 10.00
2026-01-15 18:00:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124994905029568 | finalize_measurement called with 2 points
2026-01-15 18:00:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-124994905029568 | Setting finalized = True
2026-01-15 18:00:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-124994905029568 | Measurement finalized: 2 points, 14.14m total distance
2026-01-15 18:00:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-124994905029568 | Rubber band redrawn with final points only
2026-01-15 18:00:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-124994905029568 | Switching to pan tool to stop measurement
2026-01-15 18:00:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-124994905029568 | Pan tool activated - measurement should be frozen
2026-01-15 18:00:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-124994905029568 | reset() called, finalized=True
2026-01-15 18:00:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-124994905029568 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-124994905029568 | Point 1 added: 0.00, 0.00
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-124994905029568 | Point 2 added: 100.00, 100.00
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-124994905029568 | Point 3 added: 200.00, 150.00
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124994905029568 | CacheService initialized (Default TTL: 3600s)
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-124994905029568 | ProfileController initialized
2026-01-15 18:00:39 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-124994905029568 | Loaded 1 interpretations from project
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: buffer_dist = 100.0
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dem_band = 1
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: scale = 50000.0
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: vert_exag = 1.0
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: dh_use_geom = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: interp_inherit_geol = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: interp_inherit_drill = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: show_topo = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: show_geol = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: show_struct = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: show_drillholes = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: show_interpretations = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: auto_lod = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: adaptive_sampling = True
2026-01-15 18:00:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-124994905029568 | Global setting fallback: max_points = 10000
2026-01-15 18:00:39 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-124994905029568 | Settings loaded successfully from Project/Global config
2026-01-15 18:03:57 | DEBUG    | SecInterp | setup_logging:142 | Thread-137478368373696 | Logging system initialized. Root Level: 10
2026-01-15 18:03:57 | DEBUG    | SecInterp | setup_logging:143 | Thread-137478368373696 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 18:04:53 | DEBUG    | SecInterp | setup_logging:142 | Thread-128381639547840 | Logging system initialized. Root Level: 10
2026-01-15 18:04:53 | DEBUG    | SecInterp | setup_logging:143 | Thread-128381639547840 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 18:04:53 | INFO     | SecInterp.performance | measure_operation:244 | Thread-128381639547840 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0012, 'memory_mb': 0.0, 'memory_peak_mb': 0.06, 'timestamp': '2026-01-15 18:04:53', 'args_count': 5, 'kwargs_keys': ['band_number']}
2026-01-15 18:04:53 | INFO     | SecInterp.performance | measure_operation:244 | Thread-128381639547840 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0007, 'memory_mb': 0.0, 'memory_peak_mb': 0.02, 'timestamp': '2026-01-15 18:04:53', 'args_count': 5, 'kwargs_keys': ['band_number']}
2026-01-15 18:04:53 | INFO     | SecInterp.performance | measure_operation:244 | Thread-128381639547840 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0012, 'memory_mb': 0.0, 'memory_peak_mb': 0.05, 'timestamp': '2026-01-15 18:04:53', 'args_count': 5, 'kwargs_keys': ['band_number']}
2026-01-15 18:05:28 | DEBUG    | SecInterp | setup_logging:142 | Thread-139052139592640 | Logging system initialized. Root Level: 10
2026-01-15 18:05:28 | DEBUG    | SecInterp | setup_logging:143 | Thread-139052139592640 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 18:05:28 | INFO     | SecInterp.performance | measure_operation:244 | Thread-139052139592640 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0009, 'memory_mb': 0.0, 'memory_peak_mb': 0.06, 'timestamp': '2026-01-15 18:05:28', 'args_count': 5, 'kwargs_keys': ['band_number']}
2026-01-15 18:05:28 | INFO     | SecInterp.performance | measure_operation:244 | Thread-139052139592640 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0003, 'memory_mb': 0.0, 'memory_peak_mb': 0.02, 'timestamp': '2026-01-15 18:05:28', 'args_count': 5, 'kwargs_keys': ['band_number']}
2026-01-15 18:05:28 | INFO     | SecInterp.performance | measure_operation:244 | Thread-139052139592640 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0008, 'memory_mb': 0.0, 'memory_peak_mb': 0.05, 'timestamp': '2026-01-15 18:05:28', 'args_count': 5, 'kwargs_keys': ['band_number']}
2026-01-15 18:06:01 | DEBUG    | SecInterp | setup_logging:142 | Thread-130760593189824 | Logging system initialized. Root Level: 10
2026-01-15 18:06:01 | DEBUG    | SecInterp | setup_logging:143 | Thread-130760593189824 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 18:06:01 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:83 | Thread-130760593189824 | Projecting collars from <MagicMock name='mock.name()' id='130760563607600'> with buffer 10.0m
2026-01-15 18:06:01 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-130760593189824 | Spatial Filter: confirmed 0 features intersecting buffer
2026-01-15 18:06:01 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:98 | Thread-130760593189824 | No collars found within buffer area.
2026-01-15 18:06:01 | INFO     | SecInterp.performance | measure_operation:244 | Thread-130760593189824 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0007, 'memory_mb': 0.0, 'memory_peak_mb': 0.05, 'timestamp': '2026-01-15 18:06:01', 'args_count': 5, 'kwargs_keys': ['band_number']}
2026-01-15 18:06:01 | INFO     | SecInterp.performance | measure_operation:244 | Thread-130760593189824 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0006, 'memory_mb': 0.0, 'memory_peak_mb': 0.02, 'timestamp': '2026-01-15 18:06:01', 'args_count': 5, 'kwargs_keys': ['band_number']}
2026-01-15 18:06:01 | INFO     | SecInterp.performance | measure_operation:244 | Thread-130760593189824 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0004, 'memory_mb': 0.0, 'memory_peak_mb': 0.03, 'timestamp': '2026-01-15 18:06:01', 'args_count': 5, 'kwargs_keys': []}
2026-01-15 18:06:01 | INFO     | SecInterp.performance | measure_operation:244 | Thread-130760593189824 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0007, 'memory_mb': 0.0, 'memory_peak_mb': 0.05, 'timestamp': '2026-01-15 18:06:01', 'args_count': 5, 'kwargs_keys': ['band_number']}
2026-01-15 18:06:30 | DEBUG    | SecInterp | setup_logging:142 | Thread-133462814948288 | Logging system initialized. Root Level: 10
2026-01-15 18:06:30 | DEBUG    | SecInterp | setup_logging:143 | Thread-133462814948288 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 18:06:30 | INFO     | SecInterp.performance | measure_operation:244 | Thread-133462814948288 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0007, 'memory_mb': 0.0, 'memory_peak_mb': 0.06, 'timestamp': '2026-01-15 18:06:30', 'args_count': 5, 'kwargs_keys': ['band_number']}
2026-01-15 18:06:30 | INFO     | SecInterp.performance | measure_operation:244 | Thread-133462814948288 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0005, 'memory_mb': 0.0, 'memory_peak_mb': 0.02, 'timestamp': '2026-01-15 18:06:30', 'args_count': 5, 'kwargs_keys': ['band_number']}
2026-01-15 18:06:30 | INFO     | SecInterp.performance | measure_operation:244 | Thread-133462814948288 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0025, 'memory_mb': 0.0, 'memory_peak_mb': 0.03, 'timestamp': '2026-01-15 18:06:30', 'args_count': 5, 'kwargs_keys': []}
2026-01-15 18:06:30 | INFO     | SecInterp.performance | measure_operation:244 | Thread-133462814948288 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0007, 'memory_mb': 0.0, 'memory_peak_mb': 0.05, 'timestamp': '2026-01-15 18:06:30', 'args_count': 5, 'kwargs_keys': ['band_number']}
2026-01-15 18:12:42 | DEBUG    | SecInterp | setup_logging:144 | Thread-130819971562432 | Logging system initialized. Root Level: 10
2026-01-15 18:12:42 | DEBUG    | SecInterp | setup_logging:145 | Thread-130819971562432 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-130819971562432 | Configuration reset to defaults initiated
2026-01-15 18:12:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130819971562432 | Config set: SecInterp/scale = 50000.0
2026-01-15 18:12:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130819971562432 | Config set: SecInterp/vert_exag = 1.0
2026-01-15 18:12:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130819971562432 | Config set: SecInterp/buffer_dist = 100.0
2026-01-15 18:12:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130819971562432 | Config set: SecInterp/show_topo = True
2026-01-15 18:12:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130819971562432 | Config set: SecInterp/show_geol = True
2026-01-15 18:12:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130819971562432 | Config set: SecInterp/show_struct = True
2026-01-15 18:12:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130819971562432 | Config set: SecInterp/show_drillholes = True
2026-01-15 18:12:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130819971562432 | Config set: SecInterp/show_interpretations = True
2026-01-15 18:12:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130819971562432 | Config set: SecInterp/interp_inherit_geol = True
2026-01-15 18:12:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130819971562432 | Config set: SecInterp/interp_inherit_drill = True
2026-01-15 18:12:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130819971562432 | Config set: SecInterp/dh_use_geom = True
2026-01-15 18:12:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130819971562432 | Config set: SecInterp/auto_lod = False
2026-01-15 18:12:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130819971562432 | Config set: SecInterp/adaptive_sampling = True
2026-01-15 18:12:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130819971562432 | Config set: SecInterp/max_points = 10000
2026-01-15 18:12:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130819971562432 | Config set: SecInterp/dem_band = 1
2026-01-15 18:12:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130819971562432 | Config set: SecInterp/scale = 200.0
2026-01-15 18:12:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130819971562432 | Config set: SecInterp/scale = 20000.0
2026-01-15 18:12:42 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130819971562432 | CacheService initialized (Default TTL: 3600s)
2026-01-15 18:12:42 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130819971562432 | CacheService initialized (Default TTL: 3600s)
2026-01-15 18:12:42 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130819971562432 | CacheService initialized (Default TTL: 3600s)
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:98 | Thread-130819971562432 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:117 | Thread-130819971562432 | No collars found within buffer area.
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:98 | Thread-130819971562432 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:138 | Thread-130819971562432 | DrillholeService.project_collars END: Found 1 collars.
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-130819971562432 | ✓ Saving profile axes...
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-130819971562432 | ✓ Saving topographic profile...
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-130819971562432 | ✓ Saving profile axes...
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-130819971562432 | ✓ Saving interpretation data...
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:324 | Thread-130819971562432 | 3D Export features are restricted for this user.
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-130819971562432 | ✓ Saving topographic profile...
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-130819971562432 | ✓ Saving profile axes...
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-130819971562432 | ✓ Saving interpretation data...
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:307 | Thread-130819971562432 | ✓ Saving 3D interpretation data...
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-130819971562432 | ✓ Saving topographic profile...
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-130819971562432 | ✓ Saving profile axes...
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:150 | Thread-130819971562432 | ✓ Saving geological profile...
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:178 | Thread-130819971562432 | ✓ Saving structural profile...
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:221 | Thread-130819971562432 | ✓ Saving drillhole data...
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-130819971562432 | ✓ Saving interpretation data...
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-130819971562432 | Access denied for restricted feature: 3D Export
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:324 | Thread-130819971562432 | 3D Export features are restricted for this user.
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-130819971562432 | ✓ Saving topographic profile...
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-130819971562432 | ✓ Saving profile axes...
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-130819971562432 | No interpretations provided for export.
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:221 | Thread-130819971562432 | ✓ Saving drillhole data...
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:150 | Thread-130819971562432 | ✓ Saving geological profile...
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-130819971562432 | ✓ Saving interpretation data...
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:307 | Thread-130819971562432 | ✓ Saving 3D interpretation data...
2026-01-15 18:12:42 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:322 | Thread-130819971562432 | Invalid section line layer, skipping 3D export.
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-130819971562432 | ✓ Saving interpretation data...
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:178 | Thread-130819971562432 | ✓ Saving structural profile...
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-130819971562432 | ✓ Saving topographic profile...
2026-01-15 18:12:42 | INFO     | SecInterp.performance | measure_operation:244 | Thread-130819971562432 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0034, 'memory_mb': 0.0, 'memory_peak_mb': 0.2, 'timestamp': '2026-01-15 18:12:42', 'args_count': 5, 'kwargs_keys': []}
2026-01-15 18:12:42 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:336 | Thread-130819971562432 | Generating master profile with interval=50.00
2026-01-15 18:12:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:61 | Thread-130819971562432 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 18:12:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:61 | Thread-130819971562432 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 18:12:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-130819971562432 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-15 18:12:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-130819971562432 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-15 18:12:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-130819971562432 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-15 18:12:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-130819971562432 | Running geometry operation: test
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:264 | Thread-130819971562432 | Generated 1 drillhole traces
2026-01-15 18:12:42 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:256 | Thread-130819971562432 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 238, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 18:12:42 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:261 | Thread-130819971562432 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 238, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 238, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:264 | Thread-130819971562432 | Generated 1 drillhole traces
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:177 | Thread-130819971562432 | Drillhole preview skipped: No Collar ID field selected.
2026-01-15 18:12:42 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-130819971562432 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 18:12:42 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-130819971562432 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 18:12:42 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:196 | Thread-130819971562432 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 191, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 18:12:42 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:321 | Thread-130819971562432 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 314, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 191, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 18:12:42 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:156 | Thread-130819971562432 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 154, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-130819971562432 | Analyzing structures in Structure Layer with buffer 10m
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:128 | Thread-130819971562432 | Processed 1 structural measurements from Structure Layer
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:149 | Thread-130819971562432 | Successfully exported to /tmp/test_dynamic.shp
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-130819971562432 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:135 | Thread-130819971562432 | Generated QML style: /tmp/test.qml
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-130819971562432 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:135 | Thread-130819971562432 | Generated QML style: dummy.qml
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-130819971562432 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:135 | Thread-130819971562432 | Generated QML style: dummy.qml
2026-01-15 18:12:42 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-130819971562432 | Loaded 0 interpretations from project
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:381 | Thread-130819971562432 | Inherited attributes from geology: GeologyUnit
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-130819971562432 | Loaded 0 interpretations from project
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: section_layer = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: section_layer_name = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-130819971562432 | Failed to restore layer for section_layer
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: buffer_dist = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dem_layer = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dem_layer_name = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-130819971562432 | Failed to restore layer for dem_layer
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dem_band = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: scale = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: vert_exag = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: geol_layer = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: geol_layer_name = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-130819971562432 | Failed to restore layer for geol_layer
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: geol_field = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: struct_layer = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: struct_layer_name = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-130819971562432 | Failed to restore layer for struct_layer
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: struct_dip_field = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: struct_strike_field = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dh_collar_layer = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-130819971562432 | Failed to restore layer for dh_collar_layer
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dh_collar_id = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dh_use_geom = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dh_collar_x = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dh_collar_y = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dh_collar_z = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dh_collar_depth = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dh_survey_layer = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-130819971562432 | Failed to restore layer for dh_survey_layer
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dh_survey_id = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dh_survey_depth = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dh_survey_azim = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dh_survey_incl = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dh_interval_layer = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-130819971562432 | Failed to restore layer for dh_interval_layer
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dh_interval_id = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dh_interval_from = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dh_interval_to = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dh_interval_lith = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: last_output_dir = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: interp_custom_fields = 1.0
2026-01-15 18:12:43 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:172 | Thread-130819971562432 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: show_topo = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: show_geol = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: show_struct = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: show_drillholes = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: show_interpretations = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: auto_lod = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: adaptive_sampling = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: max_points = 1.0
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-130819971562432 | Settings loaded successfully from Project/Global config
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:497 | Thread-130819971562432 | Cache cleared by user
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-130819971562432 | GeologyGenerationTask started (Background Thread)
2026-01-15 18:12:43 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:63 | Thread-130819971562432 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-130819971562432 | GeologyGenerationTask started (Background Thread)
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-130819971562432 | GeologyGenerationTask finished with 1 segments
2026-01-15 18:12:43 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-130819971562432 | Test Title: Test Message
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-130819971562432 | Test Title: Test Message
2026-01-15 18:12:43 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-130819971562432 | Test Title: Test Message
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-130819971562432 | CRITICAL_OP: finalize_polygon | points=2
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-130819971562432 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-15 18:12:43 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-130819971562432 | finalize_polygon() aborted - less than 3 points
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-130819971562432 | CRITICAL_OP: finalize_polygon | points=3
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-130819971562432 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:333 | Thread-130819971562432 | finalize_polygon() - emitting polygonFinished signal for c952b5f1-9b8d-4d76-8ca1-45a591bf9116
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:339 | Thread-130819971562432 | Interpretation polygon finalized with 3 vertices, ID: c952b5f1-9b8d-4d76-8ca1-45a591bf9116
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:342 | Thread-130819971562432 | finalize_polygon() completed
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-130819971562432 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-130819971562432 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-130819971562432 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-130819971562432 | ProfileInterpretationTool.reset() completed
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-130819971562432 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-130819971562432 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-130819971562432 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-130819971562432 | ProfileInterpretationTool.reset() completed
2026-01-15 18:12:43 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:111 | Thread-130819971562432 | Failed to create locator for layer layer1: mock error
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:142 | Thread-130819971562432 | ProfileInterpretationTool.activate() called
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:145 | Thread-130819971562432 | ProfileInterpretationTool activated successfully
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:150 | Thread-130819971562432 | ProfileInterpretationTool.deactivate() called
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-130819971562432 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-130819971562432 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-130819971562432 | ProfileInterpretationTool.reset() completed
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:153 | Thread-130819971562432 | ProfileInterpretationTool deactivated successfully
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: buffer_dist = 100.5
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:353 | Thread-130819971562432 | Persistent interpretations cleared by reset
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:405 | Thread-130819971562432 | Setting saved to project: test_layer = id_123
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:405 | Thread-130819971562432 | Setting saved to project: test_layer_name = RealName
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: test_layer = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:385 | Thread-130819971562432 | Project setting hit: test_layer_name = RealName
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:442 | Thread-130819971562432 | Restoring layer: test_layer -> RealName
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-130819971562432 | Point 1 added: 0.00, 0.00
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-130819971562432 | Point 2 added: 100.00, 100.00
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-130819971562432 | Point 1 added: 50.00, 50.00
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-130819971562432 | reset() called, finalized=False
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-130819971562432 | finalize_measurement called with 1 points
2026-01-15 18:12:43 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:275 | Thread-130819971562432 | Cannot finalize measurement with less than 2 points
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-130819971562432 | finalize_measurement called with 2 points
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-130819971562432 | Setting finalized = True
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-130819971562432 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-130819971562432 | Switching to pan tool to stop measurement
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-130819971562432 | Pan tool activated - measurement should be frozen
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:202 | Thread-130819971562432 | Ignoring click - measurement is finalized
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-130819971562432 | finalize_measurement called with 2 points
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-130819971562432 | Setting finalized = True
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-130819971562432 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-130819971562432 | Switching to pan tool to stop measurement
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-130819971562432 | Pan tool activated - measurement should be frozen
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-130819971562432 | reset() called, finalized=False
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-130819971562432 | reset() called, finalized=False
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-130819971562432 | reset() called, finalized=True
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:159 | Thread-130819971562432 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-130819971562432 | reset() called, finalized=False
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-130819971562432 | finalize_measurement called with 2 points
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-130819971562432 | Setting finalized = True
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-130819971562432 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:298 | Thread-130819971562432 | Rubber band redrawn with final points only
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-130819971562432 | Switching to pan tool to stop measurement
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-130819971562432 | Pan tool activated - measurement should be frozen
2026-01-15 18:12:43 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:103 | Thread-130819971562432 | Failed to create locator for layer layer1: mock error
2026-01-15 18:12:43 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:103 | Thread-130819971562432 | Failed to create locator for layer l2: fail
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:141 | Thread-130819971562432 | ProfileMeasureTool activated
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-130819971562432 | reset() called, finalized=False
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:147 | Thread-130819971562432 | ProfileMeasureTool deactivated
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-130819971562432 | create_drillhole_trace_layer called with 1 holes
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:393 | Thread-130819971562432 | Adding 1 drillhole trace features to layer
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-130819971562432 | create_drillhole_trace_layer called with 1 holes
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:393 | Thread-130819971562432 | Adding 1 drillhole trace features to layer
2026-01-15 18:12:43 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-130819971562432 | Failed to create memory layer: Fail
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-130819971562432 | create_drillhole_trace_layer called with 0 holes
2026-01-15 18:12:43 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-130819971562432 | No drillhole data provided for trace layer
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-130819971562432 | create_drillhole_trace_layer called with 1 holes
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:380 | Thread-130819971562432 | Skipping hole H1: insufficient trace points (1)
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:393 | Thread-130819971562432 | Adding 0 drillhole trace features to layer
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-130819971562432 | create_drillhole_trace_layer called with 1 holes
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130819971562432 | render() called
2026-01-15 18:12:43 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:156 | Thread-130819971562432 | No valid layers to render
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130819971562432 | render() called
2026-01-15 18:12:43 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:221 | Thread-130819971562432 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 198, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130819971562432 | render() called
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130819971562432 | render() called
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130819971562432 | render() called
2026-01-15 18:12:43 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:156 | Thread-130819971562432 | No valid layers to render
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130819971562432 | render() called
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130819971562432 | render() called
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-130819971562432 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-130819971562432 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130819971562432 | CacheService initialized (Default TTL: 3600s)
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-130819971562432 | ProfileController initialized
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-130819971562432 | Loaded 0 interpretations from project
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: buffer_dist = 100.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dem_band = 1
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: scale = 50000.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: vert_exag = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dh_use_geom = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: interp_inherit_geol = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: interp_inherit_drill = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: show_topo = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: show_geol = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: show_struct = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: show_drillholes = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: show_interpretations = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: auto_lod = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: adaptive_sampling = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: max_points = 10000
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-130819971562432 | Settings loaded successfully from Project/Global config
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:564 | Thread-130819971562432 | Saved 1 interpretations to project
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130819971562432 | CacheService initialized (Default TTL: 3600s)
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-130819971562432 | ProfileController initialized
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-130819971562432 | Loaded 0 interpretations from project
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: buffer_dist = 100.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dem_band = 1
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: scale = 50000.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: vert_exag = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dh_use_geom = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: interp_inherit_geol = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: interp_inherit_drill = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: show_topo = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: show_geol = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: show_struct = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: show_drillholes = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: show_interpretations = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: auto_lod = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: adaptive_sampling = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: max_points = 10000
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-130819971562432 | Settings loaded successfully from Project/Global config
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:564 | Thread-130819971562432 | Saved 1 interpretations to project
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:564 | Thread-130819971562432 | Saved 0 interpretations to project
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130819971562432 | CacheService initialized (Default TTL: 3600s)
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-130819971562432 | ProfileController initialized
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-130819971562432 | Loaded 0 interpretations from project
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: buffer_dist = 100.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dem_band = 1
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: scale = 50000.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: vert_exag = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dh_use_geom = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: interp_inherit_geol = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: interp_inherit_drill = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: show_topo = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: show_geol = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: show_struct = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: show_drillholes = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: show_interpretations = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: auto_lod = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: adaptive_sampling = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: max_points = 10000
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-130819971562432 | Settings loaded successfully from Project/Global config
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-130819971562432 | Loaded 1 interpretations from project
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-130819971562432 | Point 1 added: 0.00, 0.00
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-130819971562432 | Point 2 added: 10.00, 10.00
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-130819971562432 | finalize_measurement called with 2 points
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-130819971562432 | Setting finalized = True
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-130819971562432 | Measurement finalized: 2 points, 14.14m total distance
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:298 | Thread-130819971562432 | Rubber band redrawn with final points only
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-130819971562432 | Switching to pan tool to stop measurement
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-130819971562432 | Pan tool activated - measurement should be frozen
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-130819971562432 | reset() called, finalized=True
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:159 | Thread-130819971562432 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-130819971562432 | Point 1 added: 0.00, 0.00
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-130819971562432 | Point 2 added: 100.00, 100.00
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-130819971562432 | Point 3 added: 200.00, 150.00
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130819971562432 | CacheService initialized (Default TTL: 3600s)
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-130819971562432 | ProfileController initialized
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-130819971562432 | Loaded 1 interpretations from project
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: buffer_dist = 100.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dem_band = 1
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: scale = 50000.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: vert_exag = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: dh_use_geom = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: interp_inherit_geol = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: interp_inherit_drill = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: show_topo = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: show_geol = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: show_struct = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: show_drillholes = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: show_interpretations = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: auto_lod = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: adaptive_sampling = True
2026-01-15 18:12:43 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130819971562432 | Global setting fallback: max_points = 10000
2026-01-15 18:12:43 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-130819971562432 | Settings loaded successfully from Project/Global config
2026-01-15 18:13:16 | DEBUG    | SecInterp | setup_logging:144 | Thread-130275751386048 | Logging system initialized. Root Level: 10
2026-01-15 18:13:16 | DEBUG    | SecInterp | setup_logging:145 | Thread-130275751386048 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-130275751386048 | Configuration reset to defaults initiated
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130275751386048 | Config set: SecInterp/scale = 50000.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130275751386048 | Config set: SecInterp/vert_exag = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130275751386048 | Config set: SecInterp/buffer_dist = 100.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130275751386048 | Config set: SecInterp/show_topo = True
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130275751386048 | Config set: SecInterp/show_geol = True
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130275751386048 | Config set: SecInterp/show_struct = True
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130275751386048 | Config set: SecInterp/show_drillholes = True
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130275751386048 | Config set: SecInterp/show_interpretations = True
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130275751386048 | Config set: SecInterp/interp_inherit_geol = True
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130275751386048 | Config set: SecInterp/interp_inherit_drill = True
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130275751386048 | Config set: SecInterp/dh_use_geom = True
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130275751386048 | Config set: SecInterp/auto_lod = False
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130275751386048 | Config set: SecInterp/adaptive_sampling = True
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130275751386048 | Config set: SecInterp/max_points = 10000
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130275751386048 | Config set: SecInterp/dem_band = 1
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130275751386048 | Config set: SecInterp/scale = 200.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-130275751386048 | Config set: SecInterp/scale = 20000.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130275751386048 | CacheService initialized (Default TTL: 3600s)
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130275751386048 | CacheService initialized (Default TTL: 3600s)
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130275751386048 | CacheService initialized (Default TTL: 3600s)
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:98 | Thread-130275751386048 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:117 | Thread-130275751386048 | No collars found within buffer area.
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:98 | Thread-130275751386048 | Projecting collars from Test Layer with buffer 50.0m
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:138 | Thread-130275751386048 | DrillholeService.project_collars END: Found 1 collars.
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-130275751386048 | ✓ Saving profile axes...
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-130275751386048 | ✓ Saving topographic profile...
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-130275751386048 | ✓ Saving profile axes...
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-130275751386048 | ✓ Saving interpretation data...
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:324 | Thread-130275751386048 | 3D Export features are restricted for this user.
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-130275751386048 | ✓ Saving topographic profile...
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-130275751386048 | ✓ Saving profile axes...
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-130275751386048 | ✓ Saving interpretation data...
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:307 | Thread-130275751386048 | ✓ Saving 3D interpretation data...
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-130275751386048 | ✓ Saving topographic profile...
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-130275751386048 | ✓ Saving profile axes...
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:150 | Thread-130275751386048 | ✓ Saving geological profile...
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:178 | Thread-130275751386048 | ✓ Saving structural profile...
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:221 | Thread-130275751386048 | ✓ Saving drillhole data...
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-130275751386048 | ✓ Saving interpretation data...
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-130275751386048 | Access denied for restricted feature: 3D Export
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:324 | Thread-130275751386048 | 3D Export features are restricted for this user.
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-130275751386048 | ✓ Saving topographic profile...
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-130275751386048 | ✓ Saving profile axes...
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-130275751386048 | No interpretations provided for export.
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:221 | Thread-130275751386048 | ✓ Saving drillhole data...
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:150 | Thread-130275751386048 | ✓ Saving geological profile...
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-130275751386048 | ✓ Saving interpretation data...
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:307 | Thread-130275751386048 | ✓ Saving 3D interpretation data...
2026-01-15 18:13:16 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:322 | Thread-130275751386048 | Invalid section line layer, skipping 3D export.
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-130275751386048 | ✓ Saving interpretation data...
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:178 | Thread-130275751386048 | ✓ Saving structural profile...
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-130275751386048 | ✓ Saving topographic profile...
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:336 | Thread-130275751386048 | Generating master profile with interval=10.00
2026-01-15 18:13:16 | INFO     | SecInterp.performance | measure_operation:244 | Thread-130275751386048 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0074, 'memory_mb': 0.0, 'memory_peak_mb': 0.34, 'timestamp': '2026-01-15 18:13:16', 'args_count': 5, 'kwargs_keys': []}
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:336 | Thread-130275751386048 | Generating master profile with interval=50.00
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:61 | Thread-130275751386048 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:61 | Thread-130275751386048 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-130275751386048 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-130275751386048 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-130275751386048 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-130275751386048 | Running geometry operation: test
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:264 | Thread-130275751386048 | Generated 1 drillhole traces
2026-01-15 18:13:16 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:256 | Thread-130275751386048 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 238, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 18:13:16 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:261 | Thread-130275751386048 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 238, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 238, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:264 | Thread-130275751386048 | Generated 1 drillhole traces
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:177 | Thread-130275751386048 | Drillhole preview skipped: No Collar ID field selected.
2026-01-15 18:13:16 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-130275751386048 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 18:13:16 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-130275751386048 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 18:13:16 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:196 | Thread-130275751386048 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 191, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 18:13:16 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:321 | Thread-130275751386048 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 314, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 191, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-15 18:13:16 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:156 | Thread-130275751386048 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 154, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-130275751386048 | Analyzing structures in Structure Layer with buffer 10m
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:128 | Thread-130275751386048 | Processed 1 structural measurements from Structure Layer
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:149 | Thread-130275751386048 | Successfully exported to /tmp/test_dynamic.shp
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-130275751386048 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:135 | Thread-130275751386048 | Generated QML style: /tmp/test.qml
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-130275751386048 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:135 | Thread-130275751386048 | Generated QML style: dummy.qml
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-130275751386048 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:135 | Thread-130275751386048 | Generated QML style: dummy.qml
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-130275751386048 | Loaded 0 interpretations from project
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:381 | Thread-130275751386048 | Inherited attributes from geology: GeologyUnit
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-130275751386048 | Loaded 0 interpretations from project
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: section_layer = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: section_layer_name = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-130275751386048 | Failed to restore layer for section_layer
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: buffer_dist = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dem_layer = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dem_layer_name = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-130275751386048 | Failed to restore layer for dem_layer
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dem_band = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: scale = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: vert_exag = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: geol_layer = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: geol_layer_name = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-130275751386048 | Failed to restore layer for geol_layer
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: geol_field = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: struct_layer = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: struct_layer_name = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-130275751386048 | Failed to restore layer for struct_layer
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: struct_dip_field = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: struct_strike_field = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dh_collar_layer = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-130275751386048 | Failed to restore layer for dh_collar_layer
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dh_collar_id = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dh_use_geom = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dh_collar_x = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dh_collar_y = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dh_collar_z = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dh_collar_depth = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dh_survey_layer = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-130275751386048 | Failed to restore layer for dh_survey_layer
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dh_survey_id = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dh_survey_depth = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dh_survey_azim = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dh_survey_incl = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dh_interval_layer = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-130275751386048 | Failed to restore layer for dh_interval_layer
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dh_interval_id = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dh_interval_from = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dh_interval_to = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dh_interval_lith = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: last_output_dir = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: interp_custom_fields = 1.0
2026-01-15 18:13:16 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:172 | Thread-130275751386048 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: show_topo = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: show_geol = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: show_struct = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: show_drillholes = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: show_interpretations = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: auto_lod = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: adaptive_sampling = 1.0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: max_points = 1.0
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-130275751386048 | Settings loaded successfully from Project/Global config
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:497 | Thread-130275751386048 | Cache cleared by user
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-130275751386048 | GeologyGenerationTask started (Background Thread)
2026-01-15 18:13:16 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:63 | Thread-130275751386048 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-130275751386048 | GeologyGenerationTask started (Background Thread)
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-130275751386048 | GeologyGenerationTask finished with 1 segments
2026-01-15 18:13:16 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-130275751386048 | Test Title: Test Message
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-130275751386048 | Test Title: Test Message
2026-01-15 18:13:16 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-130275751386048 | Test Title: Test Message
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-130275751386048 | CRITICAL_OP: finalize_polygon | points=2
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-130275751386048 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-15 18:13:16 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-130275751386048 | finalize_polygon() aborted - less than 3 points
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-130275751386048 | CRITICAL_OP: finalize_polygon | points=3
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-130275751386048 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:333 | Thread-130275751386048 | finalize_polygon() - emitting polygonFinished signal for ea86c379-2885-49b7-b9b7-91663dcc12c0
2026-01-15 18:13:16 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:339 | Thread-130275751386048 | Interpretation polygon finalized with 3 vertices, ID: ea86c379-2885-49b7-b9b7-91663dcc12c0
2026-01-15 18:13:16 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:342 | Thread-130275751386048 | finalize_polygon() completed
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-130275751386048 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-130275751386048 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-130275751386048 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-130275751386048 | ProfileInterpretationTool.reset() completed
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-130275751386048 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-130275751386048 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-130275751386048 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-130275751386048 | ProfileInterpretationTool.reset() completed
2026-01-15 18:13:17 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:111 | Thread-130275751386048 | Failed to create locator for layer layer1: mock error
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:142 | Thread-130275751386048 | ProfileInterpretationTool.activate() called
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:145 | Thread-130275751386048 | ProfileInterpretationTool activated successfully
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:150 | Thread-130275751386048 | ProfileInterpretationTool.deactivate() called
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-130275751386048 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-130275751386048 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-130275751386048 | ProfileInterpretationTool.reset() completed
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:153 | Thread-130275751386048 | ProfileInterpretationTool deactivated successfully
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: buffer_dist = 100.5
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:353 | Thread-130275751386048 | Persistent interpretations cleared by reset
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:405 | Thread-130275751386048 | Setting saved to project: test_layer = id_123
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:405 | Thread-130275751386048 | Setting saved to project: test_layer_name = RealName
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: test_layer = 1.0
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:385 | Thread-130275751386048 | Project setting hit: test_layer_name = RealName
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:442 | Thread-130275751386048 | Restoring layer: test_layer -> RealName
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-130275751386048 | Point 1 added: 0.00, 0.00
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-130275751386048 | Point 2 added: 100.00, 100.00
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-130275751386048 | Point 1 added: 50.00, 50.00
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-130275751386048 | reset() called, finalized=False
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-130275751386048 | finalize_measurement called with 1 points
2026-01-15 18:13:17 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:275 | Thread-130275751386048 | Cannot finalize measurement with less than 2 points
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-130275751386048 | finalize_measurement called with 2 points
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-130275751386048 | Setting finalized = True
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-130275751386048 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-130275751386048 | Switching to pan tool to stop measurement
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-130275751386048 | Pan tool activated - measurement should be frozen
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:202 | Thread-130275751386048 | Ignoring click - measurement is finalized
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-130275751386048 | finalize_measurement called with 2 points
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-130275751386048 | Setting finalized = True
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-130275751386048 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-130275751386048 | Switching to pan tool to stop measurement
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-130275751386048 | Pan tool activated - measurement should be frozen
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-130275751386048 | reset() called, finalized=False
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-130275751386048 | reset() called, finalized=False
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-130275751386048 | reset() called, finalized=True
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:159 | Thread-130275751386048 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-130275751386048 | reset() called, finalized=False
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-130275751386048 | finalize_measurement called with 2 points
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-130275751386048 | Setting finalized = True
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-130275751386048 | Measurement finalized: 2 points, 100.00m total distance
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:298 | Thread-130275751386048 | Rubber band redrawn with final points only
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-130275751386048 | Switching to pan tool to stop measurement
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-130275751386048 | Pan tool activated - measurement should be frozen
2026-01-15 18:13:17 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:103 | Thread-130275751386048 | Failed to create locator for layer layer1: mock error
2026-01-15 18:13:17 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:103 | Thread-130275751386048 | Failed to create locator for layer l2: fail
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:141 | Thread-130275751386048 | ProfileMeasureTool activated
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-130275751386048 | reset() called, finalized=False
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:147 | Thread-130275751386048 | ProfileMeasureTool deactivated
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-130275751386048 | create_drillhole_trace_layer called with 1 holes
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:393 | Thread-130275751386048 | Adding 1 drillhole trace features to layer
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-130275751386048 | create_drillhole_trace_layer called with 1 holes
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:393 | Thread-130275751386048 | Adding 1 drillhole trace features to layer
2026-01-15 18:13:17 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-130275751386048 | Failed to create memory layer: Fail
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-130275751386048 | create_drillhole_trace_layer called with 0 holes
2026-01-15 18:13:17 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-130275751386048 | No drillhole data provided for trace layer
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-130275751386048 | create_drillhole_trace_layer called with 1 holes
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:380 | Thread-130275751386048 | Skipping hole H1: insufficient trace points (1)
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:393 | Thread-130275751386048 | Adding 0 drillhole trace features to layer
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-130275751386048 | create_drillhole_trace_layer called with 1 holes
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130275751386048 | render() called
2026-01-15 18:13:17 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:156 | Thread-130275751386048 | No valid layers to render
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130275751386048 | render() called
2026-01-15 18:13:17 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:221 | Thread-130275751386048 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 198, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130275751386048 | render() called
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130275751386048 | render() called
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130275751386048 | render() called
2026-01-15 18:13:17 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:156 | Thread-130275751386048 | No valid layers to render
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130275751386048 | render() called
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-130275751386048 | render() called
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-130275751386048 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-130275751386048 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130275751386048 | CacheService initialized (Default TTL: 3600s)
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-130275751386048 | ProfileController initialized
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-130275751386048 | Loaded 0 interpretations from project
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: buffer_dist = 100.0
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dem_band = 1
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: scale = 50000.0
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: vert_exag = 1.0
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dh_use_geom = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: interp_inherit_geol = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: interp_inherit_drill = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: show_topo = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: show_geol = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: show_struct = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: show_drillholes = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: show_interpretations = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: auto_lod = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: adaptive_sampling = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: max_points = 10000
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-130275751386048 | Settings loaded successfully from Project/Global config
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:564 | Thread-130275751386048 | Saved 1 interpretations to project
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130275751386048 | CacheService initialized (Default TTL: 3600s)
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-130275751386048 | ProfileController initialized
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-130275751386048 | Loaded 0 interpretations from project
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: buffer_dist = 100.0
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dem_band = 1
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: scale = 50000.0
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: vert_exag = 1.0
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dh_use_geom = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: interp_inherit_geol = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: interp_inherit_drill = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: show_topo = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: show_geol = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: show_struct = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: show_drillholes = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: show_interpretations = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: auto_lod = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: adaptive_sampling = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: max_points = 10000
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-130275751386048 | Settings loaded successfully from Project/Global config
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:564 | Thread-130275751386048 | Saved 1 interpretations to project
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:564 | Thread-130275751386048 | Saved 0 interpretations to project
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130275751386048 | CacheService initialized (Default TTL: 3600s)
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-130275751386048 | ProfileController initialized
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-130275751386048 | Loaded 0 interpretations from project
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: buffer_dist = 100.0
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dem_band = 1
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: scale = 50000.0
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: vert_exag = 1.0
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dh_use_geom = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: interp_inherit_geol = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: interp_inherit_drill = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: show_topo = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: show_geol = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: show_struct = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: show_drillholes = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: show_interpretations = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: auto_lod = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: adaptive_sampling = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: max_points = 10000
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-130275751386048 | Settings loaded successfully from Project/Global config
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-130275751386048 | Loaded 1 interpretations from project
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-130275751386048 | Point 1 added: 0.00, 0.00
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-130275751386048 | Point 2 added: 10.00, 10.00
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-130275751386048 | finalize_measurement called with 2 points
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-130275751386048 | Setting finalized = True
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-130275751386048 | Measurement finalized: 2 points, 14.14m total distance
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:298 | Thread-130275751386048 | Rubber band redrawn with final points only
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-130275751386048 | Switching to pan tool to stop measurement
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-130275751386048 | Pan tool activated - measurement should be frozen
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-130275751386048 | reset() called, finalized=True
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:159 | Thread-130275751386048 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-130275751386048 | Point 1 added: 0.00, 0.00
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-130275751386048 | Point 2 added: 100.00, 100.00
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-130275751386048 | Point 3 added: 200.00, 150.00
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-130275751386048 | CacheService initialized (Default TTL: 3600s)
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-130275751386048 | ProfileController initialized
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-130275751386048 | Loaded 1 interpretations from project
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: buffer_dist = 100.0
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dem_band = 1
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: scale = 50000.0
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: vert_exag = 1.0
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dip_scale_factor = 1.0
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: dh_use_geom = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: interp_inherit_geol = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: interp_inherit_drill = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: show_topo = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: show_geol = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: show_struct = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: show_drillholes = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: show_interpretations = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: auto_lod = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: adaptive_sampling = True
2026-01-15 18:13:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-130275751386048 | Global setting fallback: max_points = 10000
2026-01-15 18:13:17 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-130275751386048 | Settings loaded successfully from Project/Global config
2026-01-16 05:18:28 | DEBUG    | SecInterp | setup_logging:142 | Thread-132896309119936 | Logging system initialized. Root Level: 10
2026-01-16 05:18:28 | DEBUG    | SecInterp | setup_logging:143 | Thread-132896309119936 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-16 05:18:28 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-132896309119936 | Configuration reset to defaults initiated
2026-01-16 05:18:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132896309119936 | Config set: SecInterp/scale = 50000.0
2026-01-16 05:18:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132896309119936 | Config set: SecInterp/vert_exag = 1.0
2026-01-16 05:18:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132896309119936 | Config set: SecInterp/buffer_dist = 100.0
2026-01-16 05:18:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132896309119936 | Config set: SecInterp/show_topo = True
2026-01-16 05:18:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132896309119936 | Config set: SecInterp/show_geol = True
2026-01-16 05:18:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132896309119936 | Config set: SecInterp/show_struct = True
2026-01-16 05:18:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132896309119936 | Config set: SecInterp/show_drillholes = True
2026-01-16 05:18:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132896309119936 | Config set: SecInterp/show_interpretations = True
2026-01-16 05:18:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132896309119936 | Config set: SecInterp/interp_inherit_geol = True
2026-01-16 05:18:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132896309119936 | Config set: SecInterp/interp_inherit_drill = True
2026-01-16 05:18:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132896309119936 | Config set: SecInterp/dh_use_geom = True
2026-01-16 05:18:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132896309119936 | Config set: SecInterp/auto_lod = False
2026-01-16 05:18:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132896309119936 | Config set: SecInterp/adaptive_sampling = True
2026-01-16 05:18:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132896309119936 | Config set: SecInterp/max_points = 10000
2026-01-16 05:18:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132896309119936 | Config set: SecInterp/dem_band = 1
2026-01-16 05:18:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132896309119936 | Config set: SecInterp/scale = 200.0
2026-01-16 05:18:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132896309119936 | Config set: SecInterp/scale = 20000.0
2026-01-16 05:18:28 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132896309119936 | CacheService initialized (Default TTL: 3600s)
2026-01-16 05:18:28 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132896309119936 | CacheService initialized (Default TTL: 3600s)
2026-01-16 05:18:28 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132896309119936 | CacheService initialized (Default TTL: 3600s)
2026-01-16 05:18:28 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-132896309119936 | Projecting collars from Test Layer with buffer 50.0m
2026-01-16 05:18:28 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:106 | Thread-132896309119936 | No collars found within buffer area.
2026-01-16 05:18:28 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-132896309119936 | Projecting collars from Test Layer with buffer 50.0m
2026-01-16 05:18:28 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:127 | Thread-132896309119936 | DrillholeService.project_collars END: Found 1 collars.
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-132896309119936 | ✓ Saving profile axes...
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-132896309119936 | ✓ Saving topographic profile...
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-132896309119936 | ✓ Saving profile axes...
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-132896309119936 | ✓ Saving interpretation data...
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-132896309119936 | 3D Export features are restricted for this user.
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-132896309119936 | ✓ Saving topographic profile...
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-132896309119936 | ✓ Saving profile axes...
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-132896309119936 | ✓ Saving interpretation data...
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-132896309119936 | ✓ Saving 3D interpretation data...
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-132896309119936 | ✓ Saving topographic profile...
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-132896309119936 | ✓ Saving profile axes...
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-132896309119936 | ✓ Saving geological profile...
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-132896309119936 | ✓ Saving structural profile...
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-132896309119936 | ✓ Saving drillhole data...
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-132896309119936 | ✓ Saving interpretation data...
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-132896309119936 | Access denied for restricted feature: 3D Export
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-132896309119936 | 3D Export features are restricted for this user.
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-132896309119936 | ✓ Saving topographic profile...
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-132896309119936 | ✓ Saving profile axes...
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-132896309119936 | No interpretations provided for export.
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-132896309119936 | ✓ Saving drillhole data...
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-132896309119936 | ✓ Saving geological profile...
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-132896309119936 | ✓ Saving interpretation data...
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-132896309119936 | ✓ Saving 3D interpretation data...
2026-01-16 05:18:29 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-132896309119936 | Invalid section line layer, skipping 3D export.
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-132896309119936 | ✓ Saving interpretation data...
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-132896309119936 | ✓ Saving structural profile...
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-132896309119936 | ✓ Saving topographic profile...
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-132896309119936 | Generating master profile with interval=10.00
2026-01-16 05:18:29 | INFO     | SecInterp.performance | measure_operation:244 | Thread-132896309119936 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0069, 'memory_mb': 0.0, 'memory_peak_mb': 0.34, 'timestamp': '2026-01-16 05:18:29', 'args_count': 5, 'kwargs_keys': []}
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-132896309119936 | Generating master profile with interval=50.00
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-132896309119936 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-132896309119936 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-132896309119936 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-132896309119936 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-132896309119936 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-132896309119936 | Running geometry operation: test
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-132896309119936 | Generated 1 drillhole traces
2026-01-16 05:18:29 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-132896309119936 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-16 05:18:29 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:251 | Thread-132896309119936 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-132896309119936 | Generated 1 drillhole traces
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:171 | Thread-132896309119936 | Drillhole preview skipped: No Collar ID field selected.
2026-01-16 05:18:29 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-132896309119936 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-16 05:18:29 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-132896309119936 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-16 05:18:29 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-132896309119936 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-16 05:18:29 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-132896309119936 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-16 05:18:29 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-132896309119936 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-132896309119936 | Analyzing structures in Structure Layer with buffer 10m
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-132896309119936 | Processed 1 structural measurements from Structure Layer
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-132896309119936 | Successfully exported to /tmp/test_dynamic.shp
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-132896309119936 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-132896309119936 | Generated QML style: /tmp/test.qml
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-132896309119936 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-132896309119936 | Generated QML style: dummy.qml
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-132896309119936 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-132896309119936 | Generated QML style: dummy.qml
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-132896309119936 | Loaded 0 interpretations from project
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:369 | Thread-132896309119936 | Inherited attributes from geology: GeologyUnit
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-132896309119936 | Loaded 0 interpretations from project
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: section_layer = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: section_layer_name = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-132896309119936 | Failed to restore layer for section_layer
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: buffer_dist = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dem_layer = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dem_layer_name = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-132896309119936 | Failed to restore layer for dem_layer
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dem_band = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: scale = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: vert_exag = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: geol_layer = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: geol_layer_name = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-132896309119936 | Failed to restore layer for geol_layer
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: geol_field = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: struct_layer = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: struct_layer_name = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-132896309119936 | Failed to restore layer for struct_layer
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: struct_dip_field = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: struct_strike_field = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dip_scale_factor = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dh_collar_layer = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-132896309119936 | Failed to restore layer for dh_collar_layer
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dh_collar_id = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dh_use_geom = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dh_collar_x = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dh_collar_y = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dh_collar_z = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dh_collar_depth = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dh_survey_layer = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-132896309119936 | Failed to restore layer for dh_survey_layer
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dh_survey_id = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dh_survey_depth = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dh_survey_azim = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dh_survey_incl = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dh_interval_layer = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-132896309119936 | Failed to restore layer for dh_interval_layer
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dh_interval_id = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dh_interval_from = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dh_interval_to = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dh_interval_lith = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: last_output_dir = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: interp_custom_fields = 1.0
2026-01-16 05:18:29 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-132896309119936 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: show_topo = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: show_geol = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: show_struct = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: show_drillholes = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: show_interpretations = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: auto_lod = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: adaptive_sampling = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: max_points = 1.0
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-132896309119936 | Settings loaded successfully from Project/Global config
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:477 | Thread-132896309119936 | Cache cleared by user
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-132896309119936 | GeologyGenerationTask started (Background Thread)
2026-01-16 05:18:29 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-132896309119936 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-132896309119936 | GeologyGenerationTask started (Background Thread)
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-132896309119936 | GeologyGenerationTask finished with 1 segments
2026-01-16 05:18:29 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-132896309119936 | Test Title: Test Message
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-132896309119936 | Test Title: Test Message
2026-01-16 05:18:29 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-132896309119936 | Test Title: Test Message
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-132896309119936 | CRITICAL_OP: finalize_polygon | points=2
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-132896309119936 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-16 05:18:29 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-132896309119936 | finalize_polygon() aborted - less than 3 points
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-132896309119936 | CRITICAL_OP: finalize_polygon | points=3
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-132896309119936 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-132896309119936 | finalize_polygon() - emitting polygonFinished signal for d264b5b1-349b-4aac-880c-7b69507afb58
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-132896309119936 | Interpretation polygon finalized with 3 vertices, ID: d264b5b1-349b-4aac-880c-7b69507afb58
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-132896309119936 | finalize_polygon() completed
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-132896309119936 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-132896309119936 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-132896309119936 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-132896309119936 | ProfileInterpretationTool.reset() completed
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-132896309119936 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-132896309119936 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-132896309119936 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-132896309119936 | ProfileInterpretationTool.reset() completed
2026-01-16 05:18:29 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-132896309119936 | Failed to create locator for layer layer1: mock error
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-132896309119936 | ProfileInterpretationTool.activate() called
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-132896309119936 | ProfileInterpretationTool activated successfully
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-132896309119936 | ProfileInterpretationTool.deactivate() called
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-132896309119936 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-132896309119936 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-132896309119936 | ProfileInterpretationTool.reset() completed
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-132896309119936 | ProfileInterpretationTool deactivated successfully
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: buffer_dist = 100.5
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-132896309119936 | Persistent interpretations cleared by reset
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-132896309119936 | Setting saved to project: test_layer = id_123
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-132896309119936 | Setting saved to project: test_layer_name = RealName
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: test_layer = 1.0
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-132896309119936 | Project setting hit: test_layer_name = RealName
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-132896309119936 | Restoring layer: test_layer -> RealName
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-132896309119936 | Point 1 added: 0.00, 0.00
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-132896309119936 | Point 2 added: 100.00, 100.00
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-132896309119936 | Point 1 added: 50.00, 50.00
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-132896309119936 | reset() called, finalized=False
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-132896309119936 | finalize_measurement called with 1 points
2026-01-16 05:18:29 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-132896309119936 | Cannot finalize measurement with less than 2 points
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-132896309119936 | finalize_measurement called with 2 points
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-132896309119936 | Setting finalized = True
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-132896309119936 | Measurement finalized: 2 points, 100.00m total distance
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-132896309119936 | Switching to pan tool to stop measurement
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-132896309119936 | Pan tool activated - measurement should be frozen
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-132896309119936 | Ignoring click - measurement is finalized
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-132896309119936 | finalize_measurement called with 2 points
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-132896309119936 | Setting finalized = True
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-132896309119936 | Measurement finalized: 2 points, 100.00m total distance
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-132896309119936 | Switching to pan tool to stop measurement
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-132896309119936 | Pan tool activated - measurement should be frozen
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-132896309119936 | reset() called, finalized=False
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-132896309119936 | reset() called, finalized=False
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-132896309119936 | reset() called, finalized=True
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-132896309119936 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-132896309119936 | reset() called, finalized=False
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-132896309119936 | finalize_measurement called with 2 points
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-132896309119936 | Setting finalized = True
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-132896309119936 | Measurement finalized: 2 points, 100.00m total distance
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-132896309119936 | Rubber band redrawn with final points only
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-132896309119936 | Switching to pan tool to stop measurement
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-132896309119936 | Pan tool activated - measurement should be frozen
2026-01-16 05:18:29 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-132896309119936 | Failed to create locator for layer layer1: mock error
2026-01-16 05:18:29 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-132896309119936 | Failed to create locator for layer l2: fail
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-132896309119936 | ProfileMeasureTool activated
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-132896309119936 | reset() called, finalized=False
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-132896309119936 | ProfileMeasureTool deactivated
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-132896309119936 | create_drillhole_trace_layer called with 1 holes
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-132896309119936 | Adding 1 drillhole trace features to layer
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-132896309119936 | create_drillhole_trace_layer called with 1 holes
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-132896309119936 | Adding 1 drillhole trace features to layer
2026-01-16 05:18:29 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-132896309119936 | Failed to create memory layer: Fail
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-132896309119936 | create_drillhole_trace_layer called with 0 holes
2026-01-16 05:18:29 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-132896309119936 | No drillhole data provided for trace layer
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-132896309119936 | create_drillhole_trace_layer called with 1 holes
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-132896309119936 | Skipping hole H1: insufficient trace points (1)
2026-01-16 05:18:29 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-132896309119936 | Adding 0 drillhole trace features to layer
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-132896309119936 | create_drillhole_trace_layer called with 1 holes
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132896309119936 | render() called
2026-01-16 05:18:29 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-132896309119936 | No valid layers to render
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132896309119936 | render() called
2026-01-16 05:18:29 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-132896309119936 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132896309119936 | render() called
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132896309119936 | render() called
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132896309119936 | render() called
2026-01-16 05:18:29 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-132896309119936 | No valid layers to render
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132896309119936 | render() called
2026-01-16 05:18:29 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132896309119936 | render() called
2026-01-16 05:18:30 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-132896309119936 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-16 05:18:30 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-132896309119936 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132896309119936 | CacheService initialized (Default TTL: 3600s)
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-132896309119936 | ProfileController initialized
2026-01-16 05:18:30 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-132896309119936 | Loaded 0 interpretations from project
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: buffer_dist = 100.0
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dem_band = 1
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: scale = 50000.0
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: vert_exag = 1.0
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dip_scale_factor = 1.0
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dh_use_geom = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: interp_inherit_geol = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: interp_inherit_drill = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: show_topo = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: show_geol = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: show_struct = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: show_drillholes = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: show_interpretations = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: auto_lod = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: adaptive_sampling = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: max_points = 10000
2026-01-16 05:18:30 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-132896309119936 | Settings loaded successfully from Project/Global config
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-132896309119936 | Saved 1 interpretations to project
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132896309119936 | CacheService initialized (Default TTL: 3600s)
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-132896309119936 | ProfileController initialized
2026-01-16 05:18:30 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-132896309119936 | Loaded 0 interpretations from project
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: buffer_dist = 100.0
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dem_band = 1
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: scale = 50000.0
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: vert_exag = 1.0
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dip_scale_factor = 1.0
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dh_use_geom = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: interp_inherit_geol = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: interp_inherit_drill = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: show_topo = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: show_geol = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: show_struct = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: show_drillholes = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: show_interpretations = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: auto_lod = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: adaptive_sampling = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: max_points = 10000
2026-01-16 05:18:30 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-132896309119936 | Settings loaded successfully from Project/Global config
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-132896309119936 | Saved 1 interpretations to project
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-132896309119936 | Saved 0 interpretations to project
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132896309119936 | CacheService initialized (Default TTL: 3600s)
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-132896309119936 | ProfileController initialized
2026-01-16 05:18:30 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-132896309119936 | Loaded 0 interpretations from project
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: buffer_dist = 100.0
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dem_band = 1
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: scale = 50000.0
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: vert_exag = 1.0
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dip_scale_factor = 1.0
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dh_use_geom = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: interp_inherit_geol = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: interp_inherit_drill = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: show_topo = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: show_geol = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: show_struct = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: show_drillholes = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: show_interpretations = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: auto_lod = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: adaptive_sampling = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: max_points = 10000
2026-01-16 05:18:30 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-132896309119936 | Settings loaded successfully from Project/Global config
2026-01-16 05:18:30 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-132896309119936 | Loaded 1 interpretations from project
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-132896309119936 | Point 1 added: 0.00, 0.00
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-132896309119936 | Point 2 added: 10.00, 10.00
2026-01-16 05:18:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-132896309119936 | finalize_measurement called with 2 points
2026-01-16 05:18:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-132896309119936 | Setting finalized = True
2026-01-16 05:18:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-132896309119936 | Measurement finalized: 2 points, 14.14m total distance
2026-01-16 05:18:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-132896309119936 | Rubber band redrawn with final points only
2026-01-16 05:18:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-132896309119936 | Switching to pan tool to stop measurement
2026-01-16 05:18:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-132896309119936 | Pan tool activated - measurement should be frozen
2026-01-16 05:18:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-132896309119936 | reset() called, finalized=True
2026-01-16 05:18:30 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-132896309119936 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-132896309119936 | Point 1 added: 0.00, 0.00
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-132896309119936 | Point 2 added: 100.00, 100.00
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-132896309119936 | Point 3 added: 200.00, 150.00
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132896309119936 | CacheService initialized (Default TTL: 3600s)
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-132896309119936 | ProfileController initialized
2026-01-16 05:18:30 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-132896309119936 | Loaded 1 interpretations from project
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: buffer_dist = 100.0
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dem_band = 1
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: scale = 50000.0
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: vert_exag = 1.0
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dip_scale_factor = 1.0
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: dh_use_geom = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: interp_inherit_geol = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: interp_inherit_drill = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: show_topo = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: show_geol = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: show_struct = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: show_drillholes = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: show_interpretations = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: auto_lod = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: adaptive_sampling = True
2026-01-16 05:18:30 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-132896309119936 | Global setting fallback: max_points = 10000
2026-01-16 05:18:30 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-132896309119936 | Settings loaded successfully from Project/Global config
2026-01-16 05:27:17 | DEBUG    | SecInterp | setup_logging:144 | Thread-123605658164160 | Logging system initialized. Root Level: 10
2026-01-16 05:27:17 | DEBUG    | SecInterp | setup_logging:145 | Thread-123605658164160 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-123605658164160 | Configuration reset to defaults initiated
2026-01-16 05:27:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123605658164160 | Config set: SecInterp/scale = 50000.0
2026-01-16 05:27:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123605658164160 | Config set: SecInterp/vert_exag = 1.0
2026-01-16 05:27:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123605658164160 | Config set: SecInterp/buffer_dist = 100.0
2026-01-16 05:27:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123605658164160 | Config set: SecInterp/show_topo = True
2026-01-16 05:27:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123605658164160 | Config set: SecInterp/show_geol = True
2026-01-16 05:27:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123605658164160 | Config set: SecInterp/show_struct = True
2026-01-16 05:27:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123605658164160 | Config set: SecInterp/show_drillholes = True
2026-01-16 05:27:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123605658164160 | Config set: SecInterp/show_interpretations = True
2026-01-16 05:27:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123605658164160 | Config set: SecInterp/interp_inherit_geol = True
2026-01-16 05:27:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123605658164160 | Config set: SecInterp/interp_inherit_drill = True
2026-01-16 05:27:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123605658164160 | Config set: SecInterp/dh_use_geom = True
2026-01-16 05:27:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123605658164160 | Config set: SecInterp/auto_lod = False
2026-01-16 05:27:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123605658164160 | Config set: SecInterp/adaptive_sampling = True
2026-01-16 05:27:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123605658164160 | Config set: SecInterp/max_points = 10000
2026-01-16 05:27:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123605658164160 | Config set: SecInterp/dem_band = 1
2026-01-16 05:27:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123605658164160 | Config set: SecInterp/scale = 200.0
2026-01-16 05:27:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123605658164160 | Config set: SecInterp/scale = 20000.0
2026-01-16 05:27:17 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123605658164160 | CacheService initialized (Default TTL: 3600s)
2026-01-16 05:27:17 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123605658164160 | CacheService initialized (Default TTL: 3600s)
2026-01-16 05:27:17 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123605658164160 | CacheService initialized (Default TTL: 3600s)
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:98 | Thread-123605658164160 | Projecting collars from Test Layer with buffer 50.0m
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:117 | Thread-123605658164160 | No collars found within buffer area.
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:98 | Thread-123605658164160 | Projecting collars from Test Layer with buffer 50.0m
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:138 | Thread-123605658164160 | DrillholeService.project_collars END: Found 1 collars.
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-123605658164160 | ✓ Saving profile axes...
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-123605658164160 | ✓ Saving topographic profile...
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-123605658164160 | ✓ Saving profile axes...
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-123605658164160 | ✓ Saving interpretation data...
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:324 | Thread-123605658164160 | 3D Export features are restricted for this user.
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-123605658164160 | ✓ Saving topographic profile...
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-123605658164160 | ✓ Saving profile axes...
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-123605658164160 | ✓ Saving interpretation data...
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:307 | Thread-123605658164160 | ✓ Saving 3D interpretation data...
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-123605658164160 | ✓ Saving topographic profile...
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-123605658164160 | ✓ Saving profile axes...
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:150 | Thread-123605658164160 | ✓ Saving geological profile...
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:178 | Thread-123605658164160 | ✓ Saving structural profile...
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:221 | Thread-123605658164160 | ✓ Saving drillhole data...
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-123605658164160 | ✓ Saving interpretation data...
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-123605658164160 | Access denied for restricted feature: 3D Export
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:324 | Thread-123605658164160 | 3D Export features are restricted for this user.
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-123605658164160 | ✓ Saving topographic profile...
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-123605658164160 | ✓ Saving profile axes...
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-123605658164160 | No interpretations provided for export.
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:221 | Thread-123605658164160 | ✓ Saving drillhole data...
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:150 | Thread-123605658164160 | ✓ Saving geological profile...
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-123605658164160 | ✓ Saving interpretation data...
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:307 | Thread-123605658164160 | ✓ Saving 3D interpretation data...
2026-01-16 05:27:17 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:322 | Thread-123605658164160 | Invalid section line layer, skipping 3D export.
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-123605658164160 | ✓ Saving interpretation data...
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:178 | Thread-123605658164160 | ✓ Saving structural profile...
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-123605658164160 | ✓ Saving topographic profile...
2026-01-16 05:27:17 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:336 | Thread-123605658164160 | Generating master profile with interval=10.00
2026-01-16 05:27:17 | INFO     | SecInterp.performance | measure_operation:244 | Thread-123605658164160 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.007, 'memory_mb': 0.0, 'memory_peak_mb': 0.34, 'timestamp': '2026-01-16 05:27:17', 'args_count': 5, 'kwargs_keys': []}
2026-01-16 05:27:17 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:336 | Thread-123605658164160 | Generating master profile with interval=50.00
2026-01-16 05:27:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:61 | Thread-123605658164160 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-16 05:27:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:61 | Thread-123605658164160 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-16 05:27:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-123605658164160 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-16 05:27:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-123605658164160 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-16 05:27:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-123605658164160 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-16 05:27:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-123605658164160 | Running geometry operation: test
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:264 | Thread-123605658164160 | Generated 1 drillhole traces
2026-01-16 05:27:17 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:256 | Thread-123605658164160 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 238, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-16 05:27:17 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:261 | Thread-123605658164160 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 238, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 238, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:264 | Thread-123605658164160 | Generated 1 drillhole traces
2026-01-16 05:27:17 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:177 | Thread-123605658164160 | Drillhole preview skipped: No Collar ID field selected.
2026-01-16 05:27:17 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-123605658164160 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-16 05:27:17 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-123605658164160 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-16 05:27:17 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:196 | Thread-123605658164160 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 191, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-16 05:27:17 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:321 | Thread-123605658164160 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 314, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 191, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-16 05:27:18 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:156 | Thread-123605658164160 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 154, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-123605658164160 | Analyzing structures in Structure Layer with buffer 10m
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:128 | Thread-123605658164160 | Processed 1 structural measurements from Structure Layer
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:149 | Thread-123605658164160 | Successfully exported to /tmp/test_dynamic.shp
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-123605658164160 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:135 | Thread-123605658164160 | Generated QML style: /tmp/test.qml
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-123605658164160 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:135 | Thread-123605658164160 | Generated QML style: dummy.qml
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-123605658164160 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:135 | Thread-123605658164160 | Generated QML style: dummy.qml
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-123605658164160 | Loaded 0 interpretations from project
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:381 | Thread-123605658164160 | Inherited attributes from geology: GeologyUnit
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-123605658164160 | Loaded 0 interpretations from project
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: section_layer = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: section_layer_name = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-123605658164160 | Failed to restore layer for section_layer
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: buffer_dist = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dem_layer = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dem_layer_name = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-123605658164160 | Failed to restore layer for dem_layer
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dem_band = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: scale = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: vert_exag = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: geol_layer = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: geol_layer_name = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-123605658164160 | Failed to restore layer for geol_layer
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: geol_field = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: struct_layer = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: struct_layer_name = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-123605658164160 | Failed to restore layer for struct_layer
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: struct_dip_field = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: struct_strike_field = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dip_scale_factor = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dh_collar_layer = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-123605658164160 | Failed to restore layer for dh_collar_layer
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dh_collar_id = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dh_use_geom = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dh_collar_x = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dh_collar_y = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dh_collar_z = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dh_collar_depth = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dh_survey_layer = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-123605658164160 | Failed to restore layer for dh_survey_layer
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dh_survey_id = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dh_survey_depth = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dh_survey_azim = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dh_survey_incl = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dh_interval_layer = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-123605658164160 | Failed to restore layer for dh_interval_layer
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dh_interval_id = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dh_interval_from = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dh_interval_to = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dh_interval_lith = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: last_output_dir = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: interp_custom_fields = 1.0
2026-01-16 05:27:18 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:172 | Thread-123605658164160 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: show_topo = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: show_geol = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: show_struct = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: show_drillholes = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: show_interpretations = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: auto_lod = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: adaptive_sampling = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: max_points = 1.0
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-123605658164160 | Settings loaded successfully from Project/Global config
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:497 | Thread-123605658164160 | Cache cleared by user
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-123605658164160 | GeologyGenerationTask started (Background Thread)
2026-01-16 05:27:18 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:63 | Thread-123605658164160 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-123605658164160 | GeologyGenerationTask started (Background Thread)
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-123605658164160 | GeologyGenerationTask finished with 1 segments
2026-01-16 05:27:18 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-123605658164160 | Test Title: Test Message
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-123605658164160 | Test Title: Test Message
2026-01-16 05:27:18 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-123605658164160 | Test Title: Test Message
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-123605658164160 | CRITICAL_OP: finalize_polygon | points=2
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-123605658164160 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-16 05:27:18 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-123605658164160 | finalize_polygon() aborted - less than 3 points
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-123605658164160 | CRITICAL_OP: finalize_polygon | points=3
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-123605658164160 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:333 | Thread-123605658164160 | finalize_polygon() - emitting polygonFinished signal for a8f25d58-4fcd-4f16-b634-82c9a5c50c2d
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:339 | Thread-123605658164160 | Interpretation polygon finalized with 3 vertices, ID: a8f25d58-4fcd-4f16-b634-82c9a5c50c2d
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:342 | Thread-123605658164160 | finalize_polygon() completed
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-123605658164160 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-123605658164160 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-123605658164160 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-123605658164160 | ProfileInterpretationTool.reset() completed
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-123605658164160 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-123605658164160 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-123605658164160 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-123605658164160 | ProfileInterpretationTool.reset() completed
2026-01-16 05:27:18 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:111 | Thread-123605658164160 | Failed to create locator for layer layer1: mock error
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:142 | Thread-123605658164160 | ProfileInterpretationTool.activate() called
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:145 | Thread-123605658164160 | ProfileInterpretationTool activated successfully
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:150 | Thread-123605658164160 | ProfileInterpretationTool.deactivate() called
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-123605658164160 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-123605658164160 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-123605658164160 | ProfileInterpretationTool.reset() completed
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:153 | Thread-123605658164160 | ProfileInterpretationTool deactivated successfully
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: buffer_dist = 100.5
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:353 | Thread-123605658164160 | Persistent interpretations cleared by reset
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:405 | Thread-123605658164160 | Setting saved to project: test_layer = id_123
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:405 | Thread-123605658164160 | Setting saved to project: test_layer_name = RealName
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: test_layer = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:385 | Thread-123605658164160 | Project setting hit: test_layer_name = RealName
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:442 | Thread-123605658164160 | Restoring layer: test_layer -> RealName
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-123605658164160 | Point 1 added: 0.00, 0.00
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-123605658164160 | Point 2 added: 100.00, 100.00
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-123605658164160 | Point 1 added: 50.00, 50.00
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-123605658164160 | reset() called, finalized=False
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-123605658164160 | finalize_measurement called with 1 points
2026-01-16 05:27:18 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:275 | Thread-123605658164160 | Cannot finalize measurement with less than 2 points
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-123605658164160 | finalize_measurement called with 2 points
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-123605658164160 | Setting finalized = True
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-123605658164160 | Measurement finalized: 2 points, 100.00m total distance
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-123605658164160 | Switching to pan tool to stop measurement
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-123605658164160 | Pan tool activated - measurement should be frozen
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:202 | Thread-123605658164160 | Ignoring click - measurement is finalized
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-123605658164160 | finalize_measurement called with 2 points
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-123605658164160 | Setting finalized = True
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-123605658164160 | Measurement finalized: 2 points, 100.00m total distance
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-123605658164160 | Switching to pan tool to stop measurement
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-123605658164160 | Pan tool activated - measurement should be frozen
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-123605658164160 | reset() called, finalized=False
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-123605658164160 | reset() called, finalized=False
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-123605658164160 | reset() called, finalized=True
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:159 | Thread-123605658164160 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-123605658164160 | reset() called, finalized=False
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-123605658164160 | finalize_measurement called with 2 points
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-123605658164160 | Setting finalized = True
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-123605658164160 | Measurement finalized: 2 points, 100.00m total distance
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:298 | Thread-123605658164160 | Rubber band redrawn with final points only
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-123605658164160 | Switching to pan tool to stop measurement
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-123605658164160 | Pan tool activated - measurement should be frozen
2026-01-16 05:27:18 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:103 | Thread-123605658164160 | Failed to create locator for layer layer1: mock error
2026-01-16 05:27:18 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:103 | Thread-123605658164160 | Failed to create locator for layer l2: fail
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:141 | Thread-123605658164160 | ProfileMeasureTool activated
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-123605658164160 | reset() called, finalized=False
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:147 | Thread-123605658164160 | ProfileMeasureTool deactivated
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-123605658164160 | create_drillhole_trace_layer called with 1 holes
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:393 | Thread-123605658164160 | Adding 1 drillhole trace features to layer
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-123605658164160 | create_drillhole_trace_layer called with 1 holes
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:393 | Thread-123605658164160 | Adding 1 drillhole trace features to layer
2026-01-16 05:27:18 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-123605658164160 | Failed to create memory layer: Fail
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-123605658164160 | create_drillhole_trace_layer called with 0 holes
2026-01-16 05:27:18 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-123605658164160 | No drillhole data provided for trace layer
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-123605658164160 | create_drillhole_trace_layer called with 1 holes
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:380 | Thread-123605658164160 | Skipping hole H1: insufficient trace points (1)
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:393 | Thread-123605658164160 | Adding 0 drillhole trace features to layer
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-123605658164160 | create_drillhole_trace_layer called with 1 holes
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123605658164160 | render() called
2026-01-16 05:27:18 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:156 | Thread-123605658164160 | No valid layers to render
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123605658164160 | render() called
2026-01-16 05:27:18 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:221 | Thread-123605658164160 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 198, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123605658164160 | render() called
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123605658164160 | render() called
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123605658164160 | render() called
2026-01-16 05:27:18 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:156 | Thread-123605658164160 | No valid layers to render
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123605658164160 | render() called
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123605658164160 | render() called
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-123605658164160 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-123605658164160 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123605658164160 | CacheService initialized (Default TTL: 3600s)
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-123605658164160 | ProfileController initialized
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-123605658164160 | Loaded 0 interpretations from project
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: buffer_dist = 100.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dem_band = 1
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: scale = 50000.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: vert_exag = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dip_scale_factor = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dh_use_geom = True
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: interp_inherit_geol = True
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: interp_inherit_drill = True
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: show_topo = True
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: show_geol = True
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: show_struct = True
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: show_drillholes = True
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: show_interpretations = True
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: auto_lod = True
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: adaptive_sampling = True
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: max_points = 10000
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-123605658164160 | Settings loaded successfully from Project/Global config
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:564 | Thread-123605658164160 | Saved 1 interpretations to project
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123605658164160 | CacheService initialized (Default TTL: 3600s)
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-123605658164160 | ProfileController initialized
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-123605658164160 | Loaded 0 interpretations from project
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: buffer_dist = 100.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dem_band = 1
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: scale = 50000.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: vert_exag = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dip_scale_factor = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dh_use_geom = True
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: interp_inherit_geol = True
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: interp_inherit_drill = True
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: show_topo = True
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: show_geol = True
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: show_struct = True
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: show_drillholes = True
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: show_interpretations = True
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: auto_lod = True
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: adaptive_sampling = True
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: max_points = 10000
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-123605658164160 | Settings loaded successfully from Project/Global config
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:564 | Thread-123605658164160 | Saved 1 interpretations to project
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:564 | Thread-123605658164160 | Saved 0 interpretations to project
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123605658164160 | CacheService initialized (Default TTL: 3600s)
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-123605658164160 | ProfileController initialized
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-123605658164160 | Loaded 0 interpretations from project
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: buffer_dist = 100.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dem_band = 1
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: scale = 50000.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: vert_exag = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dip_scale_factor = 1.0
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dh_use_geom = True
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: interp_inherit_geol = True
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: interp_inherit_drill = True
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: show_topo = True
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: show_geol = True
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: show_struct = True
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: show_drillholes = True
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: show_interpretations = True
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: auto_lod = True
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: adaptive_sampling = True
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: max_points = 10000
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-123605658164160 | Settings loaded successfully from Project/Global config
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-123605658164160 | Loaded 1 interpretations from project
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-123605658164160 | Point 1 added: 0.00, 0.00
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-123605658164160 | Point 2 added: 10.00, 10.00
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-123605658164160 | finalize_measurement called with 2 points
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-123605658164160 | Setting finalized = True
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-123605658164160 | Measurement finalized: 2 points, 14.14m total distance
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:298 | Thread-123605658164160 | Rubber band redrawn with final points only
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-123605658164160 | Switching to pan tool to stop measurement
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-123605658164160 | Pan tool activated - measurement should be frozen
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-123605658164160 | reset() called, finalized=True
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:159 | Thread-123605658164160 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-123605658164160 | Point 1 added: 0.00, 0.00
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-123605658164160 | Point 2 added: 100.00, 100.00
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-123605658164160 | Point 3 added: 200.00, 150.00
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123605658164160 | CacheService initialized (Default TTL: 3600s)
2026-01-16 05:27:18 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-123605658164160 | ProfileController initialized
2026-01-16 05:27:18 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-123605658164160 | Loaded 1 interpretations from project
2026-01-16 05:27:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: buffer_dist = 100.0
2026-01-16 05:27:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dem_band = 1
2026-01-16 05:27:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: scale = 50000.0
2026-01-16 05:27:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: vert_exag = 1.0
2026-01-16 05:27:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dip_scale_factor = 1.0
2026-01-16 05:27:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: dh_use_geom = True
2026-01-16 05:27:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: interp_inherit_geol = True
2026-01-16 05:27:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: interp_inherit_drill = True
2026-01-16 05:27:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: show_topo = True
2026-01-16 05:27:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: show_geol = True
2026-01-16 05:27:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: show_struct = True
2026-01-16 05:27:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: show_drillholes = True
2026-01-16 05:27:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: show_interpretations = True
2026-01-16 05:27:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: auto_lod = True
2026-01-16 05:27:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: adaptive_sampling = True
2026-01-16 05:27:19 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-123605658164160 | Global setting fallback: max_points = 10000
2026-01-16 05:27:19 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-123605658164160 | Settings loaded successfully from Project/Global config
2026-01-16 19:20:52 | DEBUG    | SecInterp | setup_logging:142 | Thread-139008105110464 | Logging system initialized. Root Level: 10
2026-01-16 19:20:52 | DEBUG    | SecInterp | setup_logging:143 | Thread-139008105110464 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-139008105110464 | Configuration reset to defaults initiated
2026-01-16 19:20:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139008105110464 | Config set: SecInterp/scale = 50000.0
2026-01-16 19:20:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139008105110464 | Config set: SecInterp/vert_exag = 1.0
2026-01-16 19:20:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139008105110464 | Config set: SecInterp/buffer_dist = 100.0
2026-01-16 19:20:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139008105110464 | Config set: SecInterp/show_topo = True
2026-01-16 19:20:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139008105110464 | Config set: SecInterp/show_geol = True
2026-01-16 19:20:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139008105110464 | Config set: SecInterp/show_struct = True
2026-01-16 19:20:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139008105110464 | Config set: SecInterp/show_drillholes = True
2026-01-16 19:20:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139008105110464 | Config set: SecInterp/show_interpretations = True
2026-01-16 19:20:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139008105110464 | Config set: SecInterp/interp_inherit_geol = True
2026-01-16 19:20:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139008105110464 | Config set: SecInterp/interp_inherit_drill = True
2026-01-16 19:20:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139008105110464 | Config set: SecInterp/dh_use_geom = True
2026-01-16 19:20:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139008105110464 | Config set: SecInterp/auto_lod = False
2026-01-16 19:20:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139008105110464 | Config set: SecInterp/adaptive_sampling = True
2026-01-16 19:20:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139008105110464 | Config set: SecInterp/max_points = 10000
2026-01-16 19:20:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139008105110464 | Config set: SecInterp/dem_band = 1
2026-01-16 19:20:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139008105110464 | Config set: SecInterp/scale = 200.0
2026-01-16 19:20:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-139008105110464 | Config set: SecInterp/scale = 20000.0
2026-01-16 19:20:52 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139008105110464 | CacheService initialized (Default TTL: 3600s)
2026-01-16 19:20:52 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139008105110464 | CacheService initialized (Default TTL: 3600s)
2026-01-16 19:20:52 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139008105110464 | CacheService initialized (Default TTL: 3600s)
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-139008105110464 | Projecting collars from Test Layer with buffer 50.0m
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:106 | Thread-139008105110464 | No collars found within buffer area.
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-139008105110464 | Projecting collars from Test Layer with buffer 50.0m
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:127 | Thread-139008105110464 | DrillholeService.project_collars END: Found 1 collars.
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-139008105110464 | ✓ Saving profile axes...
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-139008105110464 | ✓ Saving topographic profile...
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-139008105110464 | ✓ Saving profile axes...
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-139008105110464 | ✓ Saving interpretation data...
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-139008105110464 | 3D Export features are restricted for this user.
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-139008105110464 | ✓ Saving topographic profile...
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-139008105110464 | ✓ Saving profile axes...
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-139008105110464 | ✓ Saving interpretation data...
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-139008105110464 | ✓ Saving 3D interpretation data...
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-139008105110464 | ✓ Saving topographic profile...
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-139008105110464 | ✓ Saving profile axes...
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-139008105110464 | ✓ Saving geological profile...
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-139008105110464 | ✓ Saving structural profile...
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-139008105110464 | ✓ Saving drillhole data...
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-139008105110464 | ✓ Saving interpretation data...
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-139008105110464 | Access denied for restricted feature: 3D Export
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-139008105110464 | 3D Export features are restricted for this user.
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-139008105110464 | ✓ Saving topographic profile...
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-139008105110464 | ✓ Saving profile axes...
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-139008105110464 | No interpretations provided for export.
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-139008105110464 | ✓ Saving drillhole data...
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-139008105110464 | ✓ Saving geological profile...
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-139008105110464 | ✓ Saving interpretation data...
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-139008105110464 | ✓ Saving 3D interpretation data...
2026-01-16 19:20:52 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-139008105110464 | Invalid section line layer, skipping 3D export.
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-139008105110464 | ✓ Saving interpretation data...
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-139008105110464 | ✓ Saving structural profile...
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-139008105110464 | ✓ Saving topographic profile...
2026-01-16 19:20:52 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-139008105110464 | Generating master profile with interval=10.00
2026-01-16 19:20:52 | INFO     | SecInterp.performance | measure_operation:244 | Thread-139008105110464 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0064, 'memory_mb': 0.0, 'memory_peak_mb': 0.34, 'timestamp': '2026-01-16 19:20:52', 'args_count': 5, 'kwargs_keys': []}
2026-01-16 19:20:52 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-139008105110464 | Generating master profile with interval=50.00
2026-01-16 19:20:52 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-139008105110464 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-16 19:20:52 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-139008105110464 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-16 19:20:52 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-139008105110464 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-16 19:20:52 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-139008105110464 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-16 19:20:52 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-139008105110464 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-16 19:20:52 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-139008105110464 | Running geometry operation: test
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-139008105110464 | Generated 1 drillhole traces
2026-01-16 19:20:52 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-139008105110464 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-16 19:20:52 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:251 | Thread-139008105110464 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-139008105110464 | Generated 1 drillhole traces
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:171 | Thread-139008105110464 | Drillhole preview skipped: No Collar ID field selected.
2026-01-16 19:20:52 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-139008105110464 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-16 19:20:52 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-139008105110464 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-16 19:20:52 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-139008105110464 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-16 19:20:52 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-139008105110464 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-16 19:20:52 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-139008105110464 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-139008105110464 | Analyzing structures in Structure Layer with buffer 10m
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-139008105110464 | Processed 1 structural measurements from Structure Layer
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-139008105110464 | Successfully exported to /tmp/test_dynamic.shp
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-139008105110464 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-139008105110464 | Generated QML style: /tmp/test.qml
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-139008105110464 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-139008105110464 | Generated QML style: dummy.qml
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-139008105110464 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-16 19:20:52 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-139008105110464 | Generated QML style: dummy.qml
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-139008105110464 | Loaded 0 interpretations from project
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:369 | Thread-139008105110464 | Inherited attributes from geology: GeologyUnit
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-139008105110464 | Loaded 0 interpretations from project
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: section_layer = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: section_layer_name = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-139008105110464 | Failed to restore layer for section_layer
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: buffer_dist = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dem_layer = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dem_layer_name = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-139008105110464 | Failed to restore layer for dem_layer
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dem_band = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: scale = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: vert_exag = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: geol_layer = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: geol_layer_name = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-139008105110464 | Failed to restore layer for geol_layer
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: geol_field = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: struct_layer = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: struct_layer_name = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-139008105110464 | Failed to restore layer for struct_layer
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: struct_dip_field = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: struct_strike_field = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dip_scale_factor = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dh_collar_layer = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-139008105110464 | Failed to restore layer for dh_collar_layer
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dh_collar_id = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dh_use_geom = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dh_collar_x = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dh_collar_y = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dh_collar_z = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dh_collar_depth = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dh_survey_layer = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-139008105110464 | Failed to restore layer for dh_survey_layer
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dh_survey_id = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dh_survey_depth = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dh_survey_azim = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dh_survey_incl = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dh_interval_layer = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-139008105110464 | Failed to restore layer for dh_interval_layer
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dh_interval_id = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dh_interval_from = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dh_interval_to = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dh_interval_lith = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: last_output_dir = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: interp_custom_fields = 1.0
2026-01-16 19:20:53 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-139008105110464 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: show_topo = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: show_geol = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: show_struct = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: show_drillholes = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: show_interpretations = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: auto_lod = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: adaptive_sampling = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: max_points = 1.0
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-139008105110464 | Settings loaded successfully from Project/Global config
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:477 | Thread-139008105110464 | Cache cleared by user
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-139008105110464 | GeologyGenerationTask started (Background Thread)
2026-01-16 19:20:53 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-139008105110464 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-139008105110464 | GeologyGenerationTask started (Background Thread)
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-139008105110464 | GeologyGenerationTask finished with 1 segments
2026-01-16 19:20:53 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-139008105110464 | Test Title: Test Message
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-139008105110464 | Test Title: Test Message
2026-01-16 19:20:53 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-139008105110464 | Test Title: Test Message
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-139008105110464 | CRITICAL_OP: finalize_polygon | points=2
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-139008105110464 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-16 19:20:53 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-139008105110464 | finalize_polygon() aborted - less than 3 points
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-139008105110464 | CRITICAL_OP: finalize_polygon | points=3
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-139008105110464 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-139008105110464 | finalize_polygon() - emitting polygonFinished signal for cfe1bdb5-024e-4228-8c72-ef75b6c28d16
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-139008105110464 | Interpretation polygon finalized with 3 vertices, ID: cfe1bdb5-024e-4228-8c72-ef75b6c28d16
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-139008105110464 | finalize_polygon() completed
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-139008105110464 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-139008105110464 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-139008105110464 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-139008105110464 | ProfileInterpretationTool.reset() completed
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-139008105110464 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-139008105110464 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-139008105110464 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-139008105110464 | ProfileInterpretationTool.reset() completed
2026-01-16 19:20:53 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-139008105110464 | Failed to create locator for layer layer1: mock error
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-139008105110464 | ProfileInterpretationTool.activate() called
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-139008105110464 | ProfileInterpretationTool activated successfully
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-139008105110464 | ProfileInterpretationTool.deactivate() called
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-139008105110464 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-139008105110464 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-139008105110464 | ProfileInterpretationTool.reset() completed
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-139008105110464 | ProfileInterpretationTool deactivated successfully
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: buffer_dist = 100.5
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-139008105110464 | Persistent interpretations cleared by reset
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-139008105110464 | Setting saved to project: test_layer = id_123
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-139008105110464 | Setting saved to project: test_layer_name = RealName
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: test_layer = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-139008105110464 | Project setting hit: test_layer_name = RealName
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-139008105110464 | Restoring layer: test_layer -> RealName
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-139008105110464 | Point 1 added: 0.00, 0.00
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-139008105110464 | Point 2 added: 100.00, 100.00
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-139008105110464 | Point 1 added: 50.00, 50.00
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-139008105110464 | reset() called, finalized=False
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-139008105110464 | finalize_measurement called with 1 points
2026-01-16 19:20:53 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-139008105110464 | Cannot finalize measurement with less than 2 points
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-139008105110464 | finalize_measurement called with 2 points
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-139008105110464 | Setting finalized = True
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-139008105110464 | Measurement finalized: 2 points, 100.00m total distance
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-139008105110464 | Switching to pan tool to stop measurement
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-139008105110464 | Pan tool activated - measurement should be frozen
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-139008105110464 | Ignoring click - measurement is finalized
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-139008105110464 | finalize_measurement called with 2 points
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-139008105110464 | Setting finalized = True
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-139008105110464 | Measurement finalized: 2 points, 100.00m total distance
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-139008105110464 | Switching to pan tool to stop measurement
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-139008105110464 | Pan tool activated - measurement should be frozen
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-139008105110464 | reset() called, finalized=False
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-139008105110464 | reset() called, finalized=False
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-139008105110464 | reset() called, finalized=True
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-139008105110464 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-139008105110464 | reset() called, finalized=False
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-139008105110464 | finalize_measurement called with 2 points
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-139008105110464 | Setting finalized = True
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-139008105110464 | Measurement finalized: 2 points, 100.00m total distance
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-139008105110464 | Rubber band redrawn with final points only
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-139008105110464 | Switching to pan tool to stop measurement
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-139008105110464 | Pan tool activated - measurement should be frozen
2026-01-16 19:20:53 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-139008105110464 | Failed to create locator for layer layer1: mock error
2026-01-16 19:20:53 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-139008105110464 | Failed to create locator for layer l2: fail
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-139008105110464 | ProfileMeasureTool activated
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-139008105110464 | reset() called, finalized=False
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-139008105110464 | ProfileMeasureTool deactivated
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139008105110464 | create_drillhole_trace_layer called with 1 holes
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-139008105110464 | Adding 1 drillhole trace features to layer
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139008105110464 | create_drillhole_trace_layer called with 1 holes
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-139008105110464 | Adding 1 drillhole trace features to layer
2026-01-16 19:20:53 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-139008105110464 | Failed to create memory layer: Fail
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139008105110464 | create_drillhole_trace_layer called with 0 holes
2026-01-16 19:20:53 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-139008105110464 | No drillhole data provided for trace layer
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139008105110464 | create_drillhole_trace_layer called with 1 holes
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-139008105110464 | Skipping hole H1: insufficient trace points (1)
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-139008105110464 | Adding 0 drillhole trace features to layer
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-139008105110464 | create_drillhole_trace_layer called with 1 holes
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139008105110464 | render() called
2026-01-16 19:20:53 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-139008105110464 | No valid layers to render
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139008105110464 | render() called
2026-01-16 19:20:53 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-139008105110464 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139008105110464 | render() called
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139008105110464 | render() called
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139008105110464 | render() called
2026-01-16 19:20:53 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-139008105110464 | No valid layers to render
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139008105110464 | render() called
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-139008105110464 | render() called
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-139008105110464 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-139008105110464 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139008105110464 | CacheService initialized (Default TTL: 3600s)
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-139008105110464 | ProfileController initialized
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-139008105110464 | Loaded 0 interpretations from project
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: buffer_dist = 100.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dem_band = 1
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: scale = 50000.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: vert_exag = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dip_scale_factor = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dh_use_geom = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: interp_inherit_geol = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: interp_inherit_drill = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: show_topo = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: show_geol = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: show_struct = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: show_drillholes = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: show_interpretations = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: auto_lod = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: adaptive_sampling = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: max_points = 10000
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-139008105110464 | Settings loaded successfully from Project/Global config
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-139008105110464 | Saved 1 interpretations to project
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139008105110464 | CacheService initialized (Default TTL: 3600s)
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-139008105110464 | ProfileController initialized
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-139008105110464 | Loaded 0 interpretations from project
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: buffer_dist = 100.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dem_band = 1
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: scale = 50000.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: vert_exag = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dip_scale_factor = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dh_use_geom = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: interp_inherit_geol = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: interp_inherit_drill = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: show_topo = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: show_geol = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: show_struct = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: show_drillholes = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: show_interpretations = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: auto_lod = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: adaptive_sampling = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: max_points = 10000
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-139008105110464 | Settings loaded successfully from Project/Global config
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-139008105110464 | Saved 1 interpretations to project
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-139008105110464 | Saved 0 interpretations to project
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139008105110464 | CacheService initialized (Default TTL: 3600s)
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-139008105110464 | ProfileController initialized
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-139008105110464 | Loaded 0 interpretations from project
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: buffer_dist = 100.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dem_band = 1
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: scale = 50000.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: vert_exag = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dip_scale_factor = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dh_use_geom = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: interp_inherit_geol = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: interp_inherit_drill = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: show_topo = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: show_geol = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: show_struct = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: show_drillholes = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: show_interpretations = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: auto_lod = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: adaptive_sampling = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: max_points = 10000
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-139008105110464 | Settings loaded successfully from Project/Global config
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-139008105110464 | Loaded 1 interpretations from project
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-139008105110464 | Point 1 added: 0.00, 0.00
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-139008105110464 | Point 2 added: 10.00, 10.00
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-139008105110464 | finalize_measurement called with 2 points
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-139008105110464 | Setting finalized = True
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-139008105110464 | Measurement finalized: 2 points, 14.14m total distance
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-139008105110464 | Rubber band redrawn with final points only
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-139008105110464 | Switching to pan tool to stop measurement
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-139008105110464 | Pan tool activated - measurement should be frozen
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-139008105110464 | reset() called, finalized=True
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-139008105110464 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-139008105110464 | Point 1 added: 0.00, 0.00
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-139008105110464 | Point 2 added: 100.00, 100.00
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-139008105110464 | Point 3 added: 200.00, 150.00
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-139008105110464 | CacheService initialized (Default TTL: 3600s)
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-139008105110464 | ProfileController initialized
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-139008105110464 | Loaded 1 interpretations from project
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: buffer_dist = 100.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dem_band = 1
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: scale = 50000.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: vert_exag = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dip_scale_factor = 1.0
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: dh_use_geom = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: interp_inherit_geol = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: interp_inherit_drill = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: show_topo = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: show_geol = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: show_struct = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: show_drillholes = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: show_interpretations = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: auto_lod = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: adaptive_sampling = True
2026-01-16 19:20:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-139008105110464 | Global setting fallback: max_points = 10000
2026-01-16 19:20:53 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-139008105110464 | Settings loaded successfully from Project/Global config
2026-01-17 00:33:16 | DEBUG    | SecInterp | setup_logging:142 | Thread-137974935670912 | Logging system initialized. Root Level: 10
2026-01-17 00:33:16 | DEBUG    | SecInterp | setup_logging:143 | Thread-137974935670912 | File logging path: /app/sec_interp/logs/sec_interp_debug.log
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-137974935670912 | Configuration reset to defaults initiated
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137974935670912 | Config set: SecInterp/scale = 50000.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137974935670912 | Config set: SecInterp/vert_exag = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137974935670912 | Config set: SecInterp/buffer_dist = 100.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137974935670912 | Config set: SecInterp/show_topo = True
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137974935670912 | Config set: SecInterp/show_geol = True
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137974935670912 | Config set: SecInterp/show_struct = True
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137974935670912 | Config set: SecInterp/show_drillholes = True
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137974935670912 | Config set: SecInterp/show_interpretations = True
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137974935670912 | Config set: SecInterp/interp_inherit_geol = True
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137974935670912 | Config set: SecInterp/interp_inherit_drill = True
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137974935670912 | Config set: SecInterp/dh_use_geom = True
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137974935670912 | Config set: SecInterp/auto_lod = False
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137974935670912 | Config set: SecInterp/adaptive_sampling = True
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137974935670912 | Config set: SecInterp/max_points = 10000
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137974935670912 | Config set: SecInterp/dem_band = 1
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137974935670912 | Config set: SecInterp/scale = 200.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137974935670912 | Config set: SecInterp/scale = 20000.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-137974935670912 | CacheService initialized (Default TTL: 3600s)
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-137974935670912 | CacheService initialized (Default TTL: 3600s)
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-137974935670912 | CacheService initialized (Default TTL: 3600s)
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-137974935670912 | Projecting collars from Test Layer with buffer 50.0m
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:106 | Thread-137974935670912 | No collars found within buffer area.
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-137974935670912 | Projecting collars from Test Layer with buffer 50.0m
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:127 | Thread-137974935670912 | DrillholeService.project_collars END: Found 1 collars.
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-137974935670912 | ✓ Saving profile axes...
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-137974935670912 | ✓ Saving topographic profile...
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-137974935670912 | ✓ Saving profile axes...
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-137974935670912 | ✓ Saving interpretation data...
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-137974935670912 | 3D Export features are restricted for this user.
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-137974935670912 | ✓ Saving topographic profile...
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-137974935670912 | ✓ Saving profile axes...
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-137974935670912 | ✓ Saving interpretation data...
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-137974935670912 | ✓ Saving 3D interpretation data...
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-137974935670912 | ✓ Saving topographic profile...
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-137974935670912 | ✓ Saving profile axes...
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-137974935670912 | ✓ Saving geological profile...
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-137974935670912 | ✓ Saving structural profile...
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-137974935670912 | ✓ Saving drillhole data...
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-137974935670912 | ✓ Saving interpretation data...
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-137974935670912 | Access denied for restricted feature: 3D Export
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-137974935670912 | 3D Export features are restricted for this user.
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-137974935670912 | ✓ Saving topographic profile...
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-137974935670912 | ✓ Saving profile axes...
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-137974935670912 | No interpretations provided for export.
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-137974935670912 | ✓ Saving drillhole data...
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-137974935670912 | ✓ Saving geological profile...
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-137974935670912 | ✓ Saving interpretation data...
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-137974935670912 | ✓ Saving 3D interpretation data...
2026-01-17 00:33:17 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-137974935670912 | Invalid section line layer, skipping 3D export.
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-137974935670912 | ✓ Saving interpretation data...
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-137974935670912 | ✓ Saving structural profile...
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-137974935670912 | ✓ Saving topographic profile...
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-137974935670912 | Generating master profile with interval=10.00
2026-01-17 00:33:17 | INFO     | SecInterp.performance | measure_operation:244 | Thread-137974935670912 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0075, 'memory_mb': 0.0, 'memory_peak_mb': 0.32, 'timestamp': '2026-01-17 00:33:17', 'args_count': 5, 'kwargs_keys': []}
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-137974935670912 | Generating master profile with interval=50.00
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-137974935670912 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-137974935670912 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-137974935670912 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-137974935670912 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-137974935670912 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-137974935670912 | Running geometry operation: test
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-137974935670912 | Generated 1 drillhole traces
2026-01-17 00:33:17 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-137974935670912 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-17 00:33:17 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:251 | Thread-137974935670912 | Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-137974935670912 | Generated 1 drillhole traces
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:171 | Thread-137974935670912 | Drillhole preview skipped: No Collar ID field selected.
2026-01-17 00:33:17 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-137974935670912 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-17 00:33:17 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-137974935670912 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-17 00:33:17 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-137974935670912 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-17 00:33:17 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-137974935670912 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-17 00:33:17 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-137974935670912 | Buffer creation failed
Traceback (most recent call last):
  File "/app/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-137974935670912 | Analyzing structures in Structure Layer with buffer 10m
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-137974935670912 | Processed 1 structural measurements from Structure Layer
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-137974935670912 | Successfully exported to /tmp/test_dynamic.shp
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-137974935670912 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-137974935670912 | Generated QML style: /tmp/test.qml
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-137974935670912 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-137974935670912 | Generated QML style: dummy.qml
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-137974935670912 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-137974935670912 | Generated QML style: dummy.qml
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-137974935670912 | Loaded 0 interpretations from project
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:369 | Thread-137974935670912 | Inherited attributes from geology: GeologyUnit
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-137974935670912 | Loaded 0 interpretations from project
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: section_layer = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: section_layer_name = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-137974935670912 | Failed to restore layer for section_layer
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: buffer_dist = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dem_layer = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dem_layer_name = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-137974935670912 | Failed to restore layer for dem_layer
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dem_band = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: scale = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: vert_exag = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: geol_layer = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: geol_layer_name = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-137974935670912 | Failed to restore layer for geol_layer
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: geol_field = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: struct_layer = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: struct_layer_name = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-137974935670912 | Failed to restore layer for struct_layer
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: struct_dip_field = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: struct_strike_field = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dip_scale_factor = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dh_collar_layer = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-137974935670912 | Failed to restore layer for dh_collar_layer
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dh_collar_id = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dh_use_geom = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dh_collar_x = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dh_collar_y = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dh_collar_z = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dh_collar_depth = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dh_survey_layer = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-137974935670912 | Failed to restore layer for dh_survey_layer
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dh_survey_id = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dh_survey_depth = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dh_survey_azim = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dh_survey_incl = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dh_interval_layer = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-137974935670912 | Failed to restore layer for dh_interval_layer
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dh_interval_id = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dh_interval_from = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dh_interval_to = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dh_interval_lith = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: last_output_dir = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: interp_custom_fields = 1.0
2026-01-17 00:33:17 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-137974935670912 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: show_topo = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: show_geol = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: show_struct = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: show_drillholes = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: show_interpretations = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: auto_lod = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: adaptive_sampling = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: max_points = 1.0
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-137974935670912 | Settings loaded successfully from Project/Global config
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:477 | Thread-137974935670912 | Cache cleared by user
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-137974935670912 | GeologyGenerationTask started (Background Thread)
2026-01-17 00:33:17 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-137974935670912 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/app/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-137974935670912 | GeologyGenerationTask started (Background Thread)
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-137974935670912 | GeologyGenerationTask finished with 1 segments
2026-01-17 00:33:17 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-137974935670912 | Test Title: Test Message
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-137974935670912 | Test Title: Test Message
2026-01-17 00:33:17 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-137974935670912 | Test Title: Test Message
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-137974935670912 | CRITICAL_OP: finalize_polygon | points=2
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-137974935670912 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-17 00:33:17 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-137974935670912 | finalize_polygon() aborted - less than 3 points
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-137974935670912 | CRITICAL_OP: finalize_polygon | points=3
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-137974935670912 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-137974935670912 | finalize_polygon() - emitting polygonFinished signal for 414694db-1c89-4425-bc23-685afe4abd0a
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-137974935670912 | Interpretation polygon finalized with 3 vertices, ID: 414694db-1c89-4425-bc23-685afe4abd0a
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-137974935670912 | finalize_polygon() completed
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-137974935670912 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-137974935670912 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-137974935670912 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-137974935670912 | ProfileInterpretationTool.reset() completed
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-137974935670912 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-137974935670912 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-137974935670912 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-137974935670912 | ProfileInterpretationTool.reset() completed
2026-01-17 00:33:17 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-137974935670912 | Failed to create locator for layer layer1: mock error
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-137974935670912 | ProfileInterpretationTool.activate() called
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-137974935670912 | ProfileInterpretationTool activated successfully
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-137974935670912 | ProfileInterpretationTool.deactivate() called
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-137974935670912 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-137974935670912 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-137974935670912 | ProfileInterpretationTool.reset() completed
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-137974935670912 | ProfileInterpretationTool deactivated successfully
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: buffer_dist = 100.5
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-137974935670912 | Persistent interpretations cleared by reset
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-137974935670912 | Setting saved to project: test_layer = id_123
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-137974935670912 | Setting saved to project: test_layer_name = RealName
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: test_layer = 1.0
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-137974935670912 | Project setting hit: test_layer_name = RealName
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-137974935670912 | Restoring layer: test_layer -> RealName
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-137974935670912 | Point 1 added: 0.00, 0.00
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-137974935670912 | Point 2 added: 100.00, 100.00
2026-01-17 00:33:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-137974935670912 | Point 1 added: 50.00, 50.00
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-137974935670912 | reset() called, finalized=False
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-137974935670912 | finalize_measurement called with 1 points
2026-01-17 00:33:17 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-137974935670912 | Cannot finalize measurement with less than 2 points
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-137974935670912 | finalize_measurement called with 2 points
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-137974935670912 | Setting finalized = True
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-137974935670912 | Measurement finalized: 2 points, 100.00m total distance
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-137974935670912 | Switching to pan tool to stop measurement
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-137974935670912 | Pan tool activated - measurement should be frozen
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-137974935670912 | Ignoring click - measurement is finalized
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-137974935670912 | finalize_measurement called with 2 points
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-137974935670912 | Setting finalized = True
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-137974935670912 | Measurement finalized: 2 points, 100.00m total distance
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-137974935670912 | Switching to pan tool to stop measurement
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-137974935670912 | Pan tool activated - measurement should be frozen
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-137974935670912 | reset() called, finalized=False
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-137974935670912 | reset() called, finalized=False
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-137974935670912 | reset() called, finalized=True
2026-01-17 00:33:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-137974935670912 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-17 00:33:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-137974935670912 | reset() called, finalized=False
2026-01-17 00:33:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-137974935670912 | finalize_measurement called with 2 points
2026-01-17 00:33:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-137974935670912 | Setting finalized = True
2026-01-17 00:33:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-137974935670912 | Measurement finalized: 2 points, 100.00m total distance
2026-01-17 00:33:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-137974935670912 | Rubber band redrawn with final points only
2026-01-17 00:33:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-137974935670912 | Switching to pan tool to stop measurement
2026-01-17 00:33:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-137974935670912 | Pan tool activated - measurement should be frozen
2026-01-17 00:33:18 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-137974935670912 | Failed to create locator for layer layer1: mock error
2026-01-17 00:33:18 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-137974935670912 | Failed to create locator for layer l2: fail
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-137974935670912 | ProfileMeasureTool activated
2026-01-17 00:33:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-137974935670912 | reset() called, finalized=False
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-137974935670912 | ProfileMeasureTool deactivated
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-137974935670912 | create_drillhole_trace_layer called with 1 holes
2026-01-17 00:33:18 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-137974935670912 | Adding 1 drillhole trace features to layer
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-137974935670912 | create_drillhole_trace_layer called with 1 holes
2026-01-17 00:33:18 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-137974935670912 | Adding 1 drillhole trace features to layer
2026-01-17 00:33:18 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-137974935670912 | Failed to create memory layer: Fail
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-137974935670912 | create_drillhole_trace_layer called with 0 holes
2026-01-17 00:33:18 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-137974935670912 | No drillhole data provided for trace layer
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-137974935670912 | create_drillhole_trace_layer called with 1 holes
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-137974935670912 | Skipping hole H1: insufficient trace points (1)
2026-01-17 00:33:18 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-137974935670912 | Adding 0 drillhole trace features to layer
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-137974935670912 | create_drillhole_trace_layer called with 1 holes
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137974935670912 | render() called
2026-01-17 00:33:18 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-137974935670912 | No valid layers to render
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137974935670912 | render() called
2026-01-17 00:33:18 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-137974935670912 | Error exporting preview
Traceback (most recent call last):
  File "/app/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
               ^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137974935670912 | render() called
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137974935670912 | render() called
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137974935670912 | render() called
2026-01-17 00:33:18 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-137974935670912 | No valid layers to render
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137974935670912 | render() called
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137974935670912 | render() called
2026-01-17 00:33:18 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-137974935670912 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-17 00:33:18 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-137974935670912 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-137974935670912 | CacheService initialized (Default TTL: 3600s)
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-137974935670912 | ProfileController initialized
2026-01-17 00:33:18 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-137974935670912 | Loaded 0 interpretations from project
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: buffer_dist = 100.0
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dem_band = 1
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: scale = 50000.0
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: vert_exag = 1.0
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dip_scale_factor = 1.0
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dh_use_geom = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: interp_inherit_geol = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: interp_inherit_drill = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: show_topo = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: show_geol = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: show_struct = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: show_drillholes = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: show_interpretations = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: auto_lod = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: adaptive_sampling = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: max_points = 10000
2026-01-17 00:33:18 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-137974935670912 | Settings loaded successfully from Project/Global config
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-137974935670912 | Saved 1 interpretations to project
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-137974935670912 | CacheService initialized (Default TTL: 3600s)
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-137974935670912 | ProfileController initialized
2026-01-17 00:33:18 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-137974935670912 | Loaded 0 interpretations from project
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: buffer_dist = 100.0
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dem_band = 1
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: scale = 50000.0
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: vert_exag = 1.0
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dip_scale_factor = 1.0
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dh_use_geom = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: interp_inherit_geol = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: interp_inherit_drill = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: show_topo = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: show_geol = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: show_struct = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: show_drillholes = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: show_interpretations = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: auto_lod = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: adaptive_sampling = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: max_points = 10000
2026-01-17 00:33:18 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-137974935670912 | Settings loaded successfully from Project/Global config
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-137974935670912 | Saved 1 interpretations to project
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-137974935670912 | Saved 0 interpretations to project
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-137974935670912 | CacheService initialized (Default TTL: 3600s)
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-137974935670912 | ProfileController initialized
2026-01-17 00:33:18 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-137974935670912 | Loaded 0 interpretations from project
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: buffer_dist = 100.0
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dem_band = 1
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: scale = 50000.0
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: vert_exag = 1.0
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dip_scale_factor = 1.0
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dh_use_geom = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: interp_inherit_geol = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: interp_inherit_drill = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: show_topo = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: show_geol = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: show_struct = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: show_drillholes = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: show_interpretations = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: auto_lod = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: adaptive_sampling = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: max_points = 10000
2026-01-17 00:33:18 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-137974935670912 | Settings loaded successfully from Project/Global config
2026-01-17 00:33:18 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-137974935670912 | Loaded 1 interpretations from project
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-137974935670912 | Point 1 added: 0.00, 0.00
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-137974935670912 | Point 2 added: 10.00, 10.00
2026-01-17 00:33:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-137974935670912 | finalize_measurement called with 2 points
2026-01-17 00:33:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-137974935670912 | Setting finalized = True
2026-01-17 00:33:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-137974935670912 | Measurement finalized: 2 points, 14.14m total distance
2026-01-17 00:33:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-137974935670912 | Rubber band redrawn with final points only
2026-01-17 00:33:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-137974935670912 | Switching to pan tool to stop measurement
2026-01-17 00:33:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-137974935670912 | Pan tool activated - measurement should be frozen
2026-01-17 00:33:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-137974935670912 | reset() called, finalized=True
2026-01-17 00:33:18 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-137974935670912 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-137974935670912 | Point 1 added: 0.00, 0.00
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-137974935670912 | Point 2 added: 100.00, 100.00
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-137974935670912 | Point 3 added: 200.00, 150.00
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-137974935670912 | CacheService initialized (Default TTL: 3600s)
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-137974935670912 | ProfileController initialized
2026-01-17 00:33:18 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-137974935670912 | Loaded 1 interpretations from project
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: buffer_dist = 100.0
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dem_band = 1
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: scale = 50000.0
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: vert_exag = 1.0
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dip_scale_factor = 1.0
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: dh_use_geom = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: interp_inherit_geol = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: interp_inherit_drill = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: show_topo = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: show_geol = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: show_struct = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: show_drillholes = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: show_interpretations = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: auto_lod = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: adaptive_sampling = True
2026-01-17 00:33:18 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-137974935670912 | Global setting fallback: max_points = 10000
2026-01-17 00:33:18 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-137974935670912 | Settings loaded successfully from Project/Global config
2026-01-16 19:34:11 | DEBUG    | SecInterp | setup_logging:142 | Thread-134695584082880 | Logging system initialized. Root Level: 10
2026-01-16 19:34:11 | DEBUG    | SecInterp | setup_logging:143 | Thread-134695584082880 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-16 19:34:11 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-134695584082880 | Configuration reset to defaults initiated
2026-01-16 19:34:11 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-134695584082880 | Config set: SecInterp/scale = 50000.0
2026-01-16 19:34:11 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-134695584082880 | Config set: SecInterp/vert_exag = 1.0
2026-01-16 19:34:11 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-134695584082880 | Config set: SecInterp/buffer_dist = 100.0
2026-01-16 19:34:11 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-134695584082880 | Config set: SecInterp/show_topo = True
2026-01-16 19:34:11 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-134695584082880 | Config set: SecInterp/show_geol = True
2026-01-16 19:34:11 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-134695584082880 | Config set: SecInterp/show_struct = True
2026-01-16 19:34:11 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-134695584082880 | Config set: SecInterp/show_drillholes = True
2026-01-16 19:34:11 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-134695584082880 | Config set: SecInterp/show_interpretations = True
2026-01-16 19:34:11 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-134695584082880 | Config set: SecInterp/interp_inherit_geol = True
2026-01-16 19:34:11 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-134695584082880 | Config set: SecInterp/interp_inherit_drill = True
2026-01-16 19:34:11 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-134695584082880 | Config set: SecInterp/dh_use_geom = True
2026-01-16 19:34:11 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-134695584082880 | Config set: SecInterp/auto_lod = False
2026-01-16 19:34:11 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-134695584082880 | Config set: SecInterp/adaptive_sampling = True
2026-01-16 19:34:11 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-134695584082880 | Config set: SecInterp/max_points = 10000
2026-01-16 19:34:11 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-134695584082880 | Config set: SecInterp/dem_band = 1
2026-01-16 19:34:11 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-134695584082880 | Config set: SecInterp/scale = 200.0
2026-01-16 19:34:11 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-134695584082880 | Config set: SecInterp/scale = 20000.0
2026-01-16 19:34:11 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-134695584082880 | CacheService initialized (Default TTL: 3600s)
2026-01-16 19:34:11 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-134695584082880 | CacheService initialized (Default TTL: 3600s)
2026-01-16 19:34:11 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-134695584082880 | CacheService initialized (Default TTL: 3600s)
2026-01-16 19:34:11 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-134695584082880 | Projecting collars from Test Layer with buffer 50.0m
2026-01-16 19:34:11 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:106 | Thread-134695584082880 | No collars found within buffer area.
2026-01-16 19:34:11 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-134695584082880 | Projecting collars from Test Layer with buffer 50.0m
2026-01-16 19:34:11 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:127 | Thread-134695584082880 | DrillholeService.project_collars END: Found 1 collars.
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-134695584082880 | ✓ Saving profile axes...
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-134695584082880 | ✓ Saving topographic profile...
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-134695584082880 | ✓ Saving profile axes...
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-134695584082880 | ✓ Saving interpretation data...
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-134695584082880 | 3D Export features are restricted for this user.
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-134695584082880 | ✓ Saving topographic profile...
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-134695584082880 | ✓ Saving profile axes...
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-134695584082880 | ✓ Saving interpretation data...
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-134695584082880 | ✓ Saving 3D interpretation data...
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-134695584082880 | ✓ Saving topographic profile...
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-134695584082880 | ✓ Saving profile axes...
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-134695584082880 | ✓ Saving geological profile...
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-134695584082880 | ✓ Saving structural profile...
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-134695584082880 | ✓ Saving drillhole data...
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-134695584082880 | ✓ Saving interpretation data...
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-134695584082880 | Access denied for restricted feature: 3D Export
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-134695584082880 | 3D Export features are restricted for this user.
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-134695584082880 | ✓ Saving topographic profile...
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-134695584082880 | ✓ Saving profile axes...
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-134695584082880 | No interpretations provided for export.
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-134695584082880 | ✓ Saving drillhole data...
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-134695584082880 | ✓ Saving geological profile...
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-134695584082880 | ✓ Saving interpretation data...
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-134695584082880 | ✓ Saving 3D interpretation data...
2026-01-16 19:34:12 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-134695584082880 | Invalid section line layer, skipping 3D export.
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-134695584082880 | ✓ Saving interpretation data...
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-134695584082880 | ✓ Saving structural profile...
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-134695584082880 | ✓ Saving topographic profile...
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-134695584082880 | Generating master profile with interval=10.00
2026-01-16 19:34:12 | INFO     | SecInterp.performance | measure_operation:244 | Thread-134695584082880 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0069, 'memory_mb': 0.0, 'memory_peak_mb': 0.34, 'timestamp': '2026-01-16 19:34:12', 'args_count': 5, 'kwargs_keys': []}
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-134695584082880 | Generating master profile with interval=50.00
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-134695584082880 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-134695584082880 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-134695584082880 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-134695584082880 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-134695584082880 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-134695584082880 | Running geometry operation: test
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-134695584082880 | Generated 1 drillhole traces
2026-01-16 19:34:12 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-134695584082880 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-16 19:34:12 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:251 | Thread-134695584082880 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-134695584082880 | Generated 1 drillhole traces
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:171 | Thread-134695584082880 | Drillhole preview skipped: No Collar ID field selected.
2026-01-16 19:34:12 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-134695584082880 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-16 19:34:12 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-134695584082880 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-16 19:34:12 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-134695584082880 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-16 19:34:12 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-134695584082880 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-16 19:34:12 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-134695584082880 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-134695584082880 | Analyzing structures in Structure Layer with buffer 10m
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-134695584082880 | Processed 1 structural measurements from Structure Layer
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-134695584082880 | Successfully exported to /tmp/test_dynamic.shp
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-134695584082880 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-134695584082880 | Generated QML style: /tmp/test.qml
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-134695584082880 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-134695584082880 | Generated QML style: dummy.qml
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-134695584082880 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-134695584082880 | Generated QML style: dummy.qml
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-134695584082880 | Loaded 0 interpretations from project
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:369 | Thread-134695584082880 | Inherited attributes from geology: GeologyUnit
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-134695584082880 | Loaded 0 interpretations from project
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: section_layer = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: section_layer_name = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-134695584082880 | Failed to restore layer for section_layer
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: buffer_dist = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dem_layer = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dem_layer_name = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-134695584082880 | Failed to restore layer for dem_layer
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dem_band = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: scale = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: vert_exag = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: geol_layer = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: geol_layer_name = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-134695584082880 | Failed to restore layer for geol_layer
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: geol_field = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: struct_layer = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: struct_layer_name = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-134695584082880 | Failed to restore layer for struct_layer
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: struct_dip_field = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: struct_strike_field = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dip_scale_factor = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dh_collar_layer = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-134695584082880 | Failed to restore layer for dh_collar_layer
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dh_collar_id = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dh_use_geom = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dh_collar_x = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dh_collar_y = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dh_collar_z = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dh_collar_depth = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dh_survey_layer = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-134695584082880 | Failed to restore layer for dh_survey_layer
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dh_survey_id = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dh_survey_depth = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dh_survey_azim = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dh_survey_incl = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dh_interval_layer = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-134695584082880 | Failed to restore layer for dh_interval_layer
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dh_interval_id = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dh_interval_from = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dh_interval_to = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dh_interval_lith = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: last_output_dir = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: interp_custom_fields = 1.0
2026-01-16 19:34:12 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-134695584082880 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: show_topo = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: show_geol = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: show_struct = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: show_drillholes = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: show_interpretations = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: auto_lod = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: adaptive_sampling = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: max_points = 1.0
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-134695584082880 | Settings loaded successfully from Project/Global config
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:477 | Thread-134695584082880 | Cache cleared by user
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-134695584082880 | GeologyGenerationTask started (Background Thread)
2026-01-16 19:34:12 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-134695584082880 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-134695584082880 | GeologyGenerationTask started (Background Thread)
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-134695584082880 | GeologyGenerationTask finished with 1 segments
2026-01-16 19:34:12 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-134695584082880 | Test Title: Test Message
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-134695584082880 | Test Title: Test Message
2026-01-16 19:34:12 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-134695584082880 | Test Title: Test Message
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-134695584082880 | CRITICAL_OP: finalize_polygon | points=2
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-134695584082880 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-16 19:34:12 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-134695584082880 | finalize_polygon() aborted - less than 3 points
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-134695584082880 | CRITICAL_OP: finalize_polygon | points=3
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-134695584082880 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-134695584082880 | finalize_polygon() - emitting polygonFinished signal for 79f1b357-58ad-4212-816d-0e5324bc98ed
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-134695584082880 | Interpretation polygon finalized with 3 vertices, ID: 79f1b357-58ad-4212-816d-0e5324bc98ed
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-134695584082880 | finalize_polygon() completed
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-134695584082880 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-134695584082880 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-134695584082880 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-134695584082880 | ProfileInterpretationTool.reset() completed
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-134695584082880 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-134695584082880 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-134695584082880 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-134695584082880 | ProfileInterpretationTool.reset() completed
2026-01-16 19:34:12 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-134695584082880 | Failed to create locator for layer layer1: mock error
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-134695584082880 | ProfileInterpretationTool.activate() called
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-134695584082880 | ProfileInterpretationTool activated successfully
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-134695584082880 | ProfileInterpretationTool.deactivate() called
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-134695584082880 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-134695584082880 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-134695584082880 | ProfileInterpretationTool.reset() completed
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-134695584082880 | ProfileInterpretationTool deactivated successfully
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: buffer_dist = 100.5
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-134695584082880 | Persistent interpretations cleared by reset
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-134695584082880 | Setting saved to project: test_layer = id_123
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-134695584082880 | Setting saved to project: test_layer_name = RealName
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: test_layer = 1.0
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-134695584082880 | Project setting hit: test_layer_name = RealName
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-134695584082880 | Restoring layer: test_layer -> RealName
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-134695584082880 | Point 1 added: 0.00, 0.00
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-134695584082880 | Point 2 added: 100.00, 100.00
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-134695584082880 | Point 1 added: 50.00, 50.00
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-134695584082880 | reset() called, finalized=False
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-134695584082880 | finalize_measurement called with 1 points
2026-01-16 19:34:12 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-134695584082880 | Cannot finalize measurement with less than 2 points
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-134695584082880 | finalize_measurement called with 2 points
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-134695584082880 | Setting finalized = True
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-134695584082880 | Measurement finalized: 2 points, 100.00m total distance
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-134695584082880 | Switching to pan tool to stop measurement
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-134695584082880 | Pan tool activated - measurement should be frozen
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-134695584082880 | Ignoring click - measurement is finalized
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-134695584082880 | finalize_measurement called with 2 points
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-134695584082880 | Setting finalized = True
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-134695584082880 | Measurement finalized: 2 points, 100.00m total distance
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-134695584082880 | Switching to pan tool to stop measurement
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-134695584082880 | Pan tool activated - measurement should be frozen
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-134695584082880 | reset() called, finalized=False
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-134695584082880 | reset() called, finalized=False
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-134695584082880 | reset() called, finalized=True
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-134695584082880 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-134695584082880 | reset() called, finalized=False
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-134695584082880 | finalize_measurement called with 2 points
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-134695584082880 | Setting finalized = True
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-134695584082880 | Measurement finalized: 2 points, 100.00m total distance
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-134695584082880 | Rubber band redrawn with final points only
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-134695584082880 | Switching to pan tool to stop measurement
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-134695584082880 | Pan tool activated - measurement should be frozen
2026-01-16 19:34:12 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-134695584082880 | Failed to create locator for layer layer1: mock error
2026-01-16 19:34:12 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-134695584082880 | Failed to create locator for layer l2: fail
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-134695584082880 | ProfileMeasureTool activated
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-134695584082880 | reset() called, finalized=False
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-134695584082880 | ProfileMeasureTool deactivated
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-134695584082880 | create_drillhole_trace_layer called with 1 holes
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-134695584082880 | Adding 1 drillhole trace features to layer
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-134695584082880 | create_drillhole_trace_layer called with 1 holes
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-134695584082880 | Adding 1 drillhole trace features to layer
2026-01-16 19:34:12 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-134695584082880 | Failed to create memory layer: Fail
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-134695584082880 | create_drillhole_trace_layer called with 0 holes
2026-01-16 19:34:12 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-134695584082880 | No drillhole data provided for trace layer
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-134695584082880 | create_drillhole_trace_layer called with 1 holes
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-134695584082880 | Skipping hole H1: insufficient trace points (1)
2026-01-16 19:34:12 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-134695584082880 | Adding 0 drillhole trace features to layer
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-134695584082880 | create_drillhole_trace_layer called with 1 holes
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134695584082880 | render() called
2026-01-16 19:34:12 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-134695584082880 | No valid layers to render
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134695584082880 | render() called
2026-01-16 19:34:12 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-134695584082880 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134695584082880 | render() called
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134695584082880 | render() called
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134695584082880 | render() called
2026-01-16 19:34:12 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-134695584082880 | No valid layers to render
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134695584082880 | render() called
2026-01-16 19:34:12 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-134695584082880 | render() called
2026-01-16 19:34:13 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-134695584082880 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-16 19:34:13 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-134695584082880 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-134695584082880 | CacheService initialized (Default TTL: 3600s)
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-134695584082880 | ProfileController initialized
2026-01-16 19:34:13 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-134695584082880 | Loaded 0 interpretations from project
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: buffer_dist = 100.0
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dem_band = 1
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: scale = 50000.0
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: vert_exag = 1.0
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dip_scale_factor = 1.0
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dh_use_geom = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: interp_inherit_geol = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: interp_inherit_drill = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: show_topo = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: show_geol = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: show_struct = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: show_drillholes = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: show_interpretations = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: auto_lod = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: adaptive_sampling = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: max_points = 10000
2026-01-16 19:34:13 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-134695584082880 | Settings loaded successfully from Project/Global config
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-134695584082880 | Saved 1 interpretations to project
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-134695584082880 | CacheService initialized (Default TTL: 3600s)
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-134695584082880 | ProfileController initialized
2026-01-16 19:34:13 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-134695584082880 | Loaded 0 interpretations from project
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: buffer_dist = 100.0
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dem_band = 1
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: scale = 50000.0
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: vert_exag = 1.0
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dip_scale_factor = 1.0
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dh_use_geom = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: interp_inherit_geol = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: interp_inherit_drill = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: show_topo = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: show_geol = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: show_struct = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: show_drillholes = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: show_interpretations = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: auto_lod = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: adaptive_sampling = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: max_points = 10000
2026-01-16 19:34:13 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-134695584082880 | Settings loaded successfully from Project/Global config
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-134695584082880 | Saved 1 interpretations to project
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-134695584082880 | Saved 0 interpretations to project
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-134695584082880 | CacheService initialized (Default TTL: 3600s)
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-134695584082880 | ProfileController initialized
2026-01-16 19:34:13 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-134695584082880 | Loaded 0 interpretations from project
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: buffer_dist = 100.0
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dem_band = 1
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: scale = 50000.0
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: vert_exag = 1.0
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dip_scale_factor = 1.0
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dh_use_geom = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: interp_inherit_geol = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: interp_inherit_drill = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: show_topo = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: show_geol = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: show_struct = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: show_drillholes = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: show_interpretations = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: auto_lod = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: adaptive_sampling = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: max_points = 10000
2026-01-16 19:34:13 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-134695584082880 | Settings loaded successfully from Project/Global config
2026-01-16 19:34:13 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-134695584082880 | Loaded 1 interpretations from project
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-134695584082880 | Point 1 added: 0.00, 0.00
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-134695584082880 | Point 2 added: 10.00, 10.00
2026-01-16 19:34:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-134695584082880 | finalize_measurement called with 2 points
2026-01-16 19:34:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-134695584082880 | Setting finalized = True
2026-01-16 19:34:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-134695584082880 | Measurement finalized: 2 points, 14.14m total distance
2026-01-16 19:34:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-134695584082880 | Rubber band redrawn with final points only
2026-01-16 19:34:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-134695584082880 | Switching to pan tool to stop measurement
2026-01-16 19:34:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-134695584082880 | Pan tool activated - measurement should be frozen
2026-01-16 19:34:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-134695584082880 | reset() called, finalized=True
2026-01-16 19:34:13 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-134695584082880 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-134695584082880 | Point 1 added: 0.00, 0.00
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-134695584082880 | Point 2 added: 100.00, 100.00
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-134695584082880 | Point 3 added: 200.00, 150.00
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-134695584082880 | CacheService initialized (Default TTL: 3600s)
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-134695584082880 | ProfileController initialized
2026-01-16 19:34:13 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-134695584082880 | Loaded 1 interpretations from project
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: buffer_dist = 100.0
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dem_band = 1
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: scale = 50000.0
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: vert_exag = 1.0
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dip_scale_factor = 1.0
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: dh_use_geom = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: interp_inherit_geol = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: interp_inherit_drill = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: show_topo = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: show_geol = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: show_struct = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: show_drillholes = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: show_interpretations = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: auto_lod = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: adaptive_sampling = True
2026-01-16 19:34:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-134695584082880 | Global setting fallback: max_points = 10000
2026-01-16 19:34:13 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-134695584082880 | Settings loaded successfully from Project/Global config
2026-01-16 19:37:55 | DEBUG    | SecInterp | setup_logging:144 | Thread-137128007887808 | Logging system initialized. Root Level: 10
2026-01-16 19:37:55 | DEBUG    | SecInterp | setup_logging:145 | Thread-137128007887808 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-137128007887808 | Configuration reset to defaults initiated
2026-01-16 19:37:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137128007887808 | Config set: SecInterp/scale = 50000.0
2026-01-16 19:37:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137128007887808 | Config set: SecInterp/vert_exag = 1.0
2026-01-16 19:37:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137128007887808 | Config set: SecInterp/buffer_dist = 100.0
2026-01-16 19:37:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137128007887808 | Config set: SecInterp/show_topo = True
2026-01-16 19:37:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137128007887808 | Config set: SecInterp/show_geol = True
2026-01-16 19:37:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137128007887808 | Config set: SecInterp/show_struct = True
2026-01-16 19:37:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137128007887808 | Config set: SecInterp/show_drillholes = True
2026-01-16 19:37:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137128007887808 | Config set: SecInterp/show_interpretations = True
2026-01-16 19:37:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137128007887808 | Config set: SecInterp/interp_inherit_geol = True
2026-01-16 19:37:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137128007887808 | Config set: SecInterp/interp_inherit_drill = True
2026-01-16 19:37:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137128007887808 | Config set: SecInterp/dh_use_geom = True
2026-01-16 19:37:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137128007887808 | Config set: SecInterp/auto_lod = False
2026-01-16 19:37:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137128007887808 | Config set: SecInterp/adaptive_sampling = True
2026-01-16 19:37:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137128007887808 | Config set: SecInterp/max_points = 10000
2026-01-16 19:37:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137128007887808 | Config set: SecInterp/dem_band = 1
2026-01-16 19:37:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137128007887808 | Config set: SecInterp/scale = 200.0
2026-01-16 19:37:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-137128007887808 | Config set: SecInterp/scale = 20000.0
2026-01-16 19:37:55 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-137128007887808 | CacheService initialized (Default TTL: 3600s)
2026-01-16 19:37:55 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-137128007887808 | CacheService initialized (Default TTL: 3600s)
2026-01-16 19:37:55 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-137128007887808 | CacheService initialized (Default TTL: 3600s)
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:98 | Thread-137128007887808 | Projecting collars from Test Layer with buffer 50.0m
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:117 | Thread-137128007887808 | No collars found within buffer area.
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:98 | Thread-137128007887808 | Projecting collars from Test Layer with buffer 50.0m
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:138 | Thread-137128007887808 | DrillholeService.project_collars END: Found 1 collars.
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-137128007887808 | ✓ Saving profile axes...
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-137128007887808 | ✓ Saving topographic profile...
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-137128007887808 | ✓ Saving profile axes...
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-137128007887808 | ✓ Saving interpretation data...
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:324 | Thread-137128007887808 | 3D Export features are restricted for this user.
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-137128007887808 | ✓ Saving topographic profile...
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-137128007887808 | ✓ Saving profile axes...
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-137128007887808 | ✓ Saving interpretation data...
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:307 | Thread-137128007887808 | ✓ Saving 3D interpretation data...
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-137128007887808 | ✓ Saving topographic profile...
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-137128007887808 | ✓ Saving profile axes...
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:150 | Thread-137128007887808 | ✓ Saving geological profile...
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:178 | Thread-137128007887808 | ✓ Saving structural profile...
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:221 | Thread-137128007887808 | ✓ Saving drillhole data...
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-137128007887808 | ✓ Saving interpretation data...
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-137128007887808 | Access denied for restricted feature: 3D Export
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:324 | Thread-137128007887808 | 3D Export features are restricted for this user.
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-137128007887808 | ✓ Saving topographic profile...
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-137128007887808 | ✓ Saving profile axes...
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-137128007887808 | No interpretations provided for export.
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:221 | Thread-137128007887808 | ✓ Saving drillhole data...
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:150 | Thread-137128007887808 | ✓ Saving geological profile...
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-137128007887808 | ✓ Saving interpretation data...
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:307 | Thread-137128007887808 | ✓ Saving 3D interpretation data...
2026-01-16 19:37:55 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:322 | Thread-137128007887808 | Invalid section line layer, skipping 3D export.
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-137128007887808 | ✓ Saving interpretation data...
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:178 | Thread-137128007887808 | ✓ Saving structural profile...
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-137128007887808 | ✓ Saving topographic profile...
2026-01-16 19:37:55 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:336 | Thread-137128007887808 | Generating master profile with interval=10.00
2026-01-16 19:37:55 | INFO     | SecInterp.performance | measure_operation:244 | Thread-137128007887808 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0059, 'memory_mb': 0.0, 'memory_peak_mb': 0.34, 'timestamp': '2026-01-16 19:37:55', 'args_count': 5, 'kwargs_keys': []}
2026-01-16 19:37:55 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:336 | Thread-137128007887808 | Generating master profile with interval=50.00
2026-01-16 19:37:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:61 | Thread-137128007887808 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-16 19:37:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:61 | Thread-137128007887808 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-16 19:37:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-137128007887808 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-16 19:37:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-137128007887808 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-16 19:37:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-137128007887808 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-16 19:37:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-137128007887808 | Running geometry operation: test
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:264 | Thread-137128007887808 | Generated 1 drillhole traces
2026-01-16 19:37:55 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:256 | Thread-137128007887808 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 238, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-16 19:37:55 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:261 | Thread-137128007887808 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 238, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 238, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:264 | Thread-137128007887808 | Generated 1 drillhole traces
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:177 | Thread-137128007887808 | Drillhole preview skipped: No Collar ID field selected.
2026-01-16 19:37:55 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-137128007887808 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-16 19:37:55 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-137128007887808 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-16 19:37:55 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:196 | Thread-137128007887808 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 191, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-16 19:37:55 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:321 | Thread-137128007887808 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 314, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 191, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-16 19:37:55 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:156 | Thread-137128007887808 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 154, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-137128007887808 | Analyzing structures in Structure Layer with buffer 10m
2026-01-16 19:37:55 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:128 | Thread-137128007887808 | Processed 1 structural measurements from Structure Layer
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:149 | Thread-137128007887808 | Successfully exported to /tmp/test_dynamic.shp
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-137128007887808 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:135 | Thread-137128007887808 | Generated QML style: /tmp/test.qml
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-137128007887808 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:135 | Thread-137128007887808 | Generated QML style: dummy.qml
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-137128007887808 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:135 | Thread-137128007887808 | Generated QML style: dummy.qml
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-137128007887808 | Loaded 0 interpretations from project
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:381 | Thread-137128007887808 | Inherited attributes from geology: GeologyUnit
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-137128007887808 | Loaded 0 interpretations from project
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: section_layer = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: section_layer_name = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-137128007887808 | Failed to restore layer for section_layer
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: buffer_dist = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dem_layer = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dem_layer_name = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-137128007887808 | Failed to restore layer for dem_layer
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dem_band = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: scale = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: vert_exag = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: geol_layer = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: geol_layer_name = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-137128007887808 | Failed to restore layer for geol_layer
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: geol_field = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: struct_layer = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: struct_layer_name = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-137128007887808 | Failed to restore layer for struct_layer
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: struct_dip_field = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: struct_strike_field = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dip_scale_factor = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dh_collar_layer = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-137128007887808 | Failed to restore layer for dh_collar_layer
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dh_collar_id = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dh_use_geom = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dh_collar_x = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dh_collar_y = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dh_collar_z = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dh_collar_depth = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dh_survey_layer = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-137128007887808 | Failed to restore layer for dh_survey_layer
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dh_survey_id = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dh_survey_depth = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dh_survey_azim = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dh_survey_incl = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dh_interval_layer = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:448 | Thread-137128007887808 | Failed to restore layer for dh_interval_layer
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dh_interval_id = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dh_interval_from = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dh_interval_to = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dh_interval_lith = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: last_output_dir = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: interp_custom_fields = 1.0
2026-01-16 19:37:56 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:172 | Thread-137128007887808 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: show_topo = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: show_geol = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: show_struct = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: show_drillholes = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: show_interpretations = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: auto_lod = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: adaptive_sampling = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: max_points = 1.0
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-137128007887808 | Settings loaded successfully from Project/Global config
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:497 | Thread-137128007887808 | Cache cleared by user
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-137128007887808 | GeologyGenerationTask started (Background Thread)
2026-01-16 19:37:56 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:63 | Thread-137128007887808 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-137128007887808 | GeologyGenerationTask started (Background Thread)
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-137128007887808 | GeologyGenerationTask finished with 1 segments
2026-01-16 19:37:56 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-137128007887808 | Test Title: Test Message
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-137128007887808 | Test Title: Test Message
2026-01-16 19:37:56 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-137128007887808 | Test Title: Test Message
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-137128007887808 | CRITICAL_OP: finalize_polygon | points=2
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-137128007887808 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-16 19:37:56 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-137128007887808 | finalize_polygon() aborted - less than 3 points
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-137128007887808 | CRITICAL_OP: finalize_polygon | points=3
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-137128007887808 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:333 | Thread-137128007887808 | finalize_polygon() - emitting polygonFinished signal for 74fe79f3-9eae-4110-b019-c450374e7237
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:339 | Thread-137128007887808 | Interpretation polygon finalized with 3 vertices, ID: 74fe79f3-9eae-4110-b019-c450374e7237
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:342 | Thread-137128007887808 | finalize_polygon() completed
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-137128007887808 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-137128007887808 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-137128007887808 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-137128007887808 | ProfileInterpretationTool.reset() completed
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-137128007887808 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-137128007887808 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-137128007887808 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-137128007887808 | ProfileInterpretationTool.reset() completed
2026-01-16 19:37:56 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:111 | Thread-137128007887808 | Failed to create locator for layer layer1: mock error
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:142 | Thread-137128007887808 | ProfileInterpretationTool.activate() called
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:145 | Thread-137128007887808 | ProfileInterpretationTool activated successfully
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:150 | Thread-137128007887808 | ProfileInterpretationTool.deactivate() called
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-137128007887808 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-137128007887808 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-137128007887808 | ProfileInterpretationTool.reset() completed
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:153 | Thread-137128007887808 | ProfileInterpretationTool deactivated successfully
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: buffer_dist = 100.5
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:353 | Thread-137128007887808 | Persistent interpretations cleared by reset
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:405 | Thread-137128007887808 | Setting saved to project: test_layer = id_123
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:405 | Thread-137128007887808 | Setting saved to project: test_layer_name = RealName
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: test_layer = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:385 | Thread-137128007887808 | Project setting hit: test_layer_name = RealName
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:442 | Thread-137128007887808 | Restoring layer: test_layer -> RealName
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-137128007887808 | Point 1 added: 0.00, 0.00
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-137128007887808 | Point 2 added: 100.00, 100.00
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-137128007887808 | Point 1 added: 50.00, 50.00
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-137128007887808 | reset() called, finalized=False
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-137128007887808 | finalize_measurement called with 1 points
2026-01-16 19:37:56 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:275 | Thread-137128007887808 | Cannot finalize measurement with less than 2 points
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-137128007887808 | finalize_measurement called with 2 points
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-137128007887808 | Setting finalized = True
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-137128007887808 | Measurement finalized: 2 points, 100.00m total distance
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-137128007887808 | Switching to pan tool to stop measurement
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-137128007887808 | Pan tool activated - measurement should be frozen
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:202 | Thread-137128007887808 | Ignoring click - measurement is finalized
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-137128007887808 | finalize_measurement called with 2 points
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-137128007887808 | Setting finalized = True
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-137128007887808 | Measurement finalized: 2 points, 100.00m total distance
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-137128007887808 | Switching to pan tool to stop measurement
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-137128007887808 | Pan tool activated - measurement should be frozen
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-137128007887808 | reset() called, finalized=False
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-137128007887808 | reset() called, finalized=False
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-137128007887808 | reset() called, finalized=True
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:159 | Thread-137128007887808 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-137128007887808 | reset() called, finalized=False
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-137128007887808 | finalize_measurement called with 2 points
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-137128007887808 | Setting finalized = True
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-137128007887808 | Measurement finalized: 2 points, 100.00m total distance
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:298 | Thread-137128007887808 | Rubber band redrawn with final points only
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-137128007887808 | Switching to pan tool to stop measurement
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-137128007887808 | Pan tool activated - measurement should be frozen
2026-01-16 19:37:56 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:103 | Thread-137128007887808 | Failed to create locator for layer layer1: mock error
2026-01-16 19:37:56 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:103 | Thread-137128007887808 | Failed to create locator for layer l2: fail
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:141 | Thread-137128007887808 | ProfileMeasureTool activated
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-137128007887808 | reset() called, finalized=False
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:147 | Thread-137128007887808 | ProfileMeasureTool deactivated
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-137128007887808 | create_drillhole_trace_layer called with 1 holes
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:393 | Thread-137128007887808 | Adding 1 drillhole trace features to layer
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-137128007887808 | create_drillhole_trace_layer called with 1 holes
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:393 | Thread-137128007887808 | Adding 1 drillhole trace features to layer
2026-01-16 19:37:56 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-137128007887808 | Failed to create memory layer: Fail
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-137128007887808 | create_drillhole_trace_layer called with 0 holes
2026-01-16 19:37:56 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-137128007887808 | No drillhole data provided for trace layer
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-137128007887808 | create_drillhole_trace_layer called with 1 holes
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:380 | Thread-137128007887808 | Skipping hole H1: insufficient trace points (1)
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:393 | Thread-137128007887808 | Adding 0 drillhole trace features to layer
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-137128007887808 | create_drillhole_trace_layer called with 1 holes
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137128007887808 | render() called
2026-01-16 19:37:56 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:156 | Thread-137128007887808 | No valid layers to render
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137128007887808 | render() called
2026-01-16 19:37:56 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:221 | Thread-137128007887808 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 198, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137128007887808 | render() called
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137128007887808 | render() called
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137128007887808 | render() called
2026-01-16 19:37:56 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:156 | Thread-137128007887808 | No valid layers to render
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137128007887808 | render() called
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-137128007887808 | render() called
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-137128007887808 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-137128007887808 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-137128007887808 | CacheService initialized (Default TTL: 3600s)
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-137128007887808 | ProfileController initialized
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-137128007887808 | Loaded 0 interpretations from project
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: buffer_dist = 100.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dem_band = 1
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: scale = 50000.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: vert_exag = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dip_scale_factor = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dh_use_geom = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: interp_inherit_geol = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: interp_inherit_drill = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: show_topo = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: show_geol = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: show_struct = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: show_drillholes = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: show_interpretations = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: auto_lod = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: adaptive_sampling = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: max_points = 10000
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-137128007887808 | Settings loaded successfully from Project/Global config
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:564 | Thread-137128007887808 | Saved 1 interpretations to project
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-137128007887808 | CacheService initialized (Default TTL: 3600s)
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-137128007887808 | ProfileController initialized
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-137128007887808 | Loaded 0 interpretations from project
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: buffer_dist = 100.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dem_band = 1
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: scale = 50000.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: vert_exag = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dip_scale_factor = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dh_use_geom = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: interp_inherit_geol = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: interp_inherit_drill = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: show_topo = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: show_geol = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: show_struct = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: show_drillholes = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: show_interpretations = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: auto_lod = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: adaptive_sampling = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: max_points = 10000
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-137128007887808 | Settings loaded successfully from Project/Global config
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:564 | Thread-137128007887808 | Saved 1 interpretations to project
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:564 | Thread-137128007887808 | Saved 0 interpretations to project
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-137128007887808 | CacheService initialized (Default TTL: 3600s)
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-137128007887808 | ProfileController initialized
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-137128007887808 | Loaded 0 interpretations from project
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: buffer_dist = 100.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dem_band = 1
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: scale = 50000.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: vert_exag = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dip_scale_factor = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dh_use_geom = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: interp_inherit_geol = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: interp_inherit_drill = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: show_topo = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: show_geol = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: show_struct = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: show_drillholes = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: show_interpretations = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: auto_lod = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: adaptive_sampling = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: max_points = 10000
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-137128007887808 | Settings loaded successfully from Project/Global config
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-137128007887808 | Loaded 1 interpretations from project
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-137128007887808 | Point 1 added: 0.00, 0.00
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-137128007887808 | Point 2 added: 10.00, 10.00
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-137128007887808 | finalize_measurement called with 2 points
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-137128007887808 | Setting finalized = True
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-137128007887808 | Measurement finalized: 2 points, 14.14m total distance
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:298 | Thread-137128007887808 | Rubber band redrawn with final points only
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-137128007887808 | Switching to pan tool to stop measurement
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-137128007887808 | Pan tool activated - measurement should be frozen
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-137128007887808 | reset() called, finalized=True
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:159 | Thread-137128007887808 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-137128007887808 | Point 1 added: 0.00, 0.00
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-137128007887808 | Point 2 added: 100.00, 100.00
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-137128007887808 | Point 3 added: 200.00, 150.00
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-137128007887808 | CacheService initialized (Default TTL: 3600s)
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-137128007887808 | ProfileController initialized
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:589 | Thread-137128007887808 | Loaded 1 interpretations from project
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: buffer_dist = 100.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dem_band = 1
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: scale = 50000.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: vert_exag = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dip_scale_factor = 1.0
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: dh_use_geom = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: interp_inherit_geol = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: interp_inherit_drill = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: show_topo = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: show_geol = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: show_struct = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: show_drillholes = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: show_interpretations = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: auto_lod = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: adaptive_sampling = True
2026-01-16 19:37:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:393 | Thread-137128007887808 | Global setting fallback: max_points = 10000
2026-01-16 19:37:56 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-137128007887808 | Settings loaded successfully from Project/Global config
2026-01-17 10:46:12 | DEBUG    | SecInterp | setup_logging:142 | Thread-135136487174272 | Logging system initialized. Root Level: 10
2026-01-17 10:46:12 | DEBUG    | SecInterp | setup_logging:143 | Thread-135136487174272 | File logging path: /app/sec_interp/logs/sec_interp_debug.log
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-135136487174272 | Configuration reset to defaults initiated
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135136487174272 | Config set: SecInterp/scale = 50000.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135136487174272 | Config set: SecInterp/vert_exag = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135136487174272 | Config set: SecInterp/buffer_dist = 100.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135136487174272 | Config set: SecInterp/show_topo = True
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135136487174272 | Config set: SecInterp/show_geol = True
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135136487174272 | Config set: SecInterp/show_struct = True
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135136487174272 | Config set: SecInterp/show_drillholes = True
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135136487174272 | Config set: SecInterp/show_interpretations = True
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135136487174272 | Config set: SecInterp/interp_inherit_geol = True
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135136487174272 | Config set: SecInterp/interp_inherit_drill = True
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135136487174272 | Config set: SecInterp/dh_use_geom = True
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135136487174272 | Config set: SecInterp/auto_lod = False
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135136487174272 | Config set: SecInterp/adaptive_sampling = True
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135136487174272 | Config set: SecInterp/max_points = 10000
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135136487174272 | Config set: SecInterp/dem_band = 1
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135136487174272 | Config set: SecInterp/scale = 200.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135136487174272 | Config set: SecInterp/scale = 20000.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135136487174272 | CacheService initialized (Default TTL: 3600s)
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135136487174272 | CacheService initialized (Default TTL: 3600s)
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135136487174272 | CacheService initialized (Default TTL: 3600s)
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-135136487174272 | Projecting collars from Test Layer with buffer 50.0m
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:106 | Thread-135136487174272 | No collars found within buffer area.
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-135136487174272 | Projecting collars from Test Layer with buffer 50.0m
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:127 | Thread-135136487174272 | DrillholeService.project_collars END: Found 1 collars.
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-135136487174272 | ✓ Saving profile axes...
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-135136487174272 | ✓ Saving topographic profile...
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-135136487174272 | ✓ Saving profile axes...
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-135136487174272 | ✓ Saving interpretation data...
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-135136487174272 | 3D Export features are restricted for this user.
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-135136487174272 | ✓ Saving topographic profile...
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-135136487174272 | ✓ Saving profile axes...
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-135136487174272 | ✓ Saving interpretation data...
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-135136487174272 | ✓ Saving 3D interpretation data...
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-135136487174272 | ✓ Saving topographic profile...
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-135136487174272 | ✓ Saving profile axes...
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-135136487174272 | ✓ Saving geological profile...
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-135136487174272 | ✓ Saving structural profile...
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-135136487174272 | ✓ Saving drillhole data...
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-135136487174272 | ✓ Saving interpretation data...
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-135136487174272 | Access denied for restricted feature: 3D Export
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-135136487174272 | 3D Export features are restricted for this user.
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-135136487174272 | ✓ Saving topographic profile...
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-135136487174272 | ✓ Saving profile axes...
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-135136487174272 | No interpretations provided for export.
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-135136487174272 | ✓ Saving drillhole data...
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-135136487174272 | ✓ Saving geological profile...
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-135136487174272 | ✓ Saving interpretation data...
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-135136487174272 | ✓ Saving 3D interpretation data...
2026-01-17 10:46:13 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-135136487174272 | Invalid section line layer, skipping 3D export.
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-135136487174272 | ✓ Saving interpretation data...
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-135136487174272 | ✓ Saving structural profile...
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-135136487174272 | ✓ Saving topographic profile...
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-135136487174272 | Generating master profile with interval=10.00
2026-01-17 10:46:13 | INFO     | SecInterp.performance | measure_operation:244 | Thread-135136487174272 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.008, 'memory_mb': 0.0, 'memory_peak_mb': 0.32, 'timestamp': '2026-01-17 10:46:13', 'args_count': 5, 'kwargs_keys': []}
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-135136487174272 | Generating master profile with interval=50.00
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-135136487174272 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-135136487174272 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-135136487174272 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-135136487174272 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-135136487174272 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-135136487174272 | Running geometry operation: test
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-135136487174272 | Generated 1 drillhole traces
2026-01-17 10:46:13 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-135136487174272 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-17 10:46:13 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:251 | Thread-135136487174272 | Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-135136487174272 | Generated 1 drillhole traces
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:171 | Thread-135136487174272 | Drillhole preview skipped: No Collar ID field selected.
2026-01-17 10:46:13 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-135136487174272 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-17 10:46:13 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-135136487174272 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-17 10:46:13 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-135136487174272 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-17 10:46:13 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-135136487174272 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-17 10:46:13 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-135136487174272 | Buffer creation failed
Traceback (most recent call last):
  File "/app/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-135136487174272 | Analyzing structures in Structure Layer with buffer 10m
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-135136487174272 | Processed 1 structural measurements from Structure Layer
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-135136487174272 | Successfully exported to /tmp/test_dynamic.shp
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-135136487174272 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-135136487174272 | Generated QML style: /tmp/test.qml
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-135136487174272 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-135136487174272 | Generated QML style: dummy.qml
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-135136487174272 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-135136487174272 | Generated QML style: dummy.qml
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-135136487174272 | Loaded 0 interpretations from project
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.gui.main_dialog | _apply_attribute_inheritance:369 | Thread-135136487174272 | Inherited attributes from geology: GeologyUnit
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-135136487174272 | Loaded 0 interpretations from project
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: section_layer = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: section_layer_name = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-135136487174272 | Failed to restore layer for section_layer
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: buffer_dist = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dem_layer = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dem_layer_name = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-135136487174272 | Failed to restore layer for dem_layer
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dem_band = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: scale = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: vert_exag = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: geol_layer = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: geol_layer_name = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-135136487174272 | Failed to restore layer for geol_layer
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: geol_field = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: struct_layer = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: struct_layer_name = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-135136487174272 | Failed to restore layer for struct_layer
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: struct_dip_field = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: struct_strike_field = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dip_scale_factor = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dh_collar_layer = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-135136487174272 | Failed to restore layer for dh_collar_layer
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dh_collar_id = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dh_use_geom = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dh_collar_x = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dh_collar_y = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dh_collar_z = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dh_collar_depth = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dh_survey_layer = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-135136487174272 | Failed to restore layer for dh_survey_layer
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dh_survey_id = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dh_survey_depth = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dh_survey_azim = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dh_survey_incl = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dh_interval_layer = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-135136487174272 | Failed to restore layer for dh_interval_layer
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dh_interval_id = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dh_interval_from = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dh_interval_to = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dh_interval_lith = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: last_output_dir = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: interp_custom_fields = 1.0
2026-01-17 10:46:13 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-135136487174272 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: show_topo = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: show_geol = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: show_struct = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: show_drillholes = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: show_interpretations = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: auto_lod = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: adaptive_sampling = 1.0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: max_points = 1.0
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-135136487174272 | Settings loaded successfully from Project/Global config
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:477 | Thread-135136487174272 | Cache cleared by user
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-135136487174272 | GeologyGenerationTask started (Background Thread)
2026-01-17 10:46:13 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-135136487174272 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/app/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-135136487174272 | GeologyGenerationTask started (Background Thread)
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-135136487174272 | GeologyGenerationTask finished with 1 segments
2026-01-17 10:46:13 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-135136487174272 | Test Title: Test Message
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-135136487174272 | Test Title: Test Message
2026-01-17 10:46:13 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-135136487174272 | Test Title: Test Message
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-135136487174272 | CRITICAL_OP: finalize_polygon | points=2
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-135136487174272 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-17 10:46:13 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-135136487174272 | finalize_polygon() aborted - less than 3 points
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-135136487174272 | CRITICAL_OP: finalize_polygon | points=3
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-135136487174272 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-135136487174272 | finalize_polygon() - emitting polygonFinished signal for af6c62af-3852-4fb0-abec-7cd66a72c7f3
2026-01-17 10:46:13 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-135136487174272 | Interpretation polygon finalized with 3 vertices, ID: af6c62af-3852-4fb0-abec-7cd66a72c7f3
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-135136487174272 | finalize_polygon() completed
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-135136487174272 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-135136487174272 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-135136487174272 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-135136487174272 | ProfileInterpretationTool.reset() completed
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-135136487174272 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-135136487174272 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-135136487174272 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-17 10:46:13 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-135136487174272 | ProfileInterpretationTool.reset() completed
2026-01-17 10:46:14 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-135136487174272 | Failed to create locator for layer layer1: mock error
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-135136487174272 | ProfileInterpretationTool.activate() called
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-135136487174272 | ProfileInterpretationTool activated successfully
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-135136487174272 | ProfileInterpretationTool.deactivate() called
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-135136487174272 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-135136487174272 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-135136487174272 | ProfileInterpretationTool.reset() completed
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-135136487174272 | ProfileInterpretationTool deactivated successfully
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: buffer_dist = 100.5
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-135136487174272 | Persistent interpretations cleared by reset
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-135136487174272 | Setting saved to project: test_layer = id_123
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-135136487174272 | Setting saved to project: test_layer_name = RealName
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: test_layer = 1.0
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-135136487174272 | Project setting hit: test_layer_name = RealName
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-135136487174272 | Restoring layer: test_layer -> RealName
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-135136487174272 | Point 1 added: 0.00, 0.00
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-135136487174272 | Point 2 added: 100.00, 100.00
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-135136487174272 | Point 1 added: 50.00, 50.00
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-135136487174272 | reset() called, finalized=False
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-135136487174272 | finalize_measurement called with 1 points
2026-01-17 10:46:14 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-135136487174272 | Cannot finalize measurement with less than 2 points
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-135136487174272 | finalize_measurement called with 2 points
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-135136487174272 | Setting finalized = True
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-135136487174272 | Measurement finalized: 2 points, 100.00m total distance
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-135136487174272 | Switching to pan tool to stop measurement
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-135136487174272 | Pan tool activated - measurement should be frozen
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-135136487174272 | Ignoring click - measurement is finalized
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-135136487174272 | finalize_measurement called with 2 points
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-135136487174272 | Setting finalized = True
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-135136487174272 | Measurement finalized: 2 points, 100.00m total distance
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-135136487174272 | Switching to pan tool to stop measurement
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-135136487174272 | Pan tool activated - measurement should be frozen
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-135136487174272 | reset() called, finalized=False
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-135136487174272 | reset() called, finalized=False
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-135136487174272 | reset() called, finalized=True
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-135136487174272 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-135136487174272 | reset() called, finalized=False
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-135136487174272 | finalize_measurement called with 2 points
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-135136487174272 | Setting finalized = True
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-135136487174272 | Measurement finalized: 2 points, 100.00m total distance
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-135136487174272 | Rubber band redrawn with final points only
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-135136487174272 | Switching to pan tool to stop measurement
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-135136487174272 | Pan tool activated - measurement should be frozen
2026-01-17 10:46:14 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-135136487174272 | Failed to create locator for layer layer1: mock error
2026-01-17 10:46:14 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-135136487174272 | Failed to create locator for layer l2: fail
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-135136487174272 | ProfileMeasureTool activated
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-135136487174272 | reset() called, finalized=False
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-135136487174272 | ProfileMeasureTool deactivated
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-135136487174272 | create_drillhole_trace_layer called with 1 holes
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-135136487174272 | Adding 1 drillhole trace features to layer
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-135136487174272 | create_drillhole_trace_layer called with 1 holes
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-135136487174272 | Adding 1 drillhole trace features to layer
2026-01-17 10:46:14 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-135136487174272 | Failed to create memory layer: Fail
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-135136487174272 | create_drillhole_trace_layer called with 0 holes
2026-01-17 10:46:14 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-135136487174272 | No drillhole data provided for trace layer
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-135136487174272 | create_drillhole_trace_layer called with 1 holes
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-135136487174272 | Skipping hole H1: insufficient trace points (1)
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-135136487174272 | Adding 0 drillhole trace features to layer
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-135136487174272 | create_drillhole_trace_layer called with 1 holes
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-135136487174272 | render() called
2026-01-17 10:46:14 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-135136487174272 | No valid layers to render
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-135136487174272 | render() called
2026-01-17 10:46:14 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-135136487174272 | Error exporting preview
Traceback (most recent call last):
  File "/app/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
               ^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-135136487174272 | render() called
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-135136487174272 | render() called
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-135136487174272 | render() called
2026-01-17 10:46:14 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-135136487174272 | No valid layers to render
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-135136487174272 | render() called
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-135136487174272 | render() called
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-135136487174272 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-135136487174272 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135136487174272 | CacheService initialized (Default TTL: 3600s)
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-135136487174272 | ProfileController initialized
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-135136487174272 | Loaded 0 interpretations from project
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: buffer_dist = 100.0
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dem_band = 1
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: scale = 50000.0
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: vert_exag = 1.0
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dip_scale_factor = 1.0
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dh_use_geom = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: interp_inherit_geol = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: interp_inherit_drill = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: show_topo = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: show_geol = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: show_struct = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: show_drillholes = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: show_interpretations = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: auto_lod = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: adaptive_sampling = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: max_points = 10000
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-135136487174272 | Settings loaded successfully from Project/Global config
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-135136487174272 | Saved 1 interpretations to project
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135136487174272 | CacheService initialized (Default TTL: 3600s)
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-135136487174272 | ProfileController initialized
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-135136487174272 | Loaded 0 interpretations from project
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: buffer_dist = 100.0
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dem_band = 1
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: scale = 50000.0
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: vert_exag = 1.0
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dip_scale_factor = 1.0
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dh_use_geom = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: interp_inherit_geol = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: interp_inherit_drill = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: show_topo = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: show_geol = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: show_struct = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: show_drillholes = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: show_interpretations = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: auto_lod = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: adaptive_sampling = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: max_points = 10000
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-135136487174272 | Settings loaded successfully from Project/Global config
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-135136487174272 | Saved 1 interpretations to project
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog | _save_interpretations:540 | Thread-135136487174272 | Saved 0 interpretations to project
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135136487174272 | CacheService initialized (Default TTL: 3600s)
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-135136487174272 | ProfileController initialized
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-135136487174272 | Loaded 0 interpretations from project
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: buffer_dist = 100.0
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dem_band = 1
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: scale = 50000.0
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: vert_exag = 1.0
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dip_scale_factor = 1.0
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dh_use_geom = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: interp_inherit_geol = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: interp_inherit_drill = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: show_topo = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: show_geol = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: show_struct = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: show_drillholes = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: show_interpretations = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: auto_lod = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: adaptive_sampling = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: max_points = 10000
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-135136487174272 | Settings loaded successfully from Project/Global config
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-135136487174272 | Loaded 1 interpretations from project
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-135136487174272 | Point 1 added: 0.00, 0.00
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-135136487174272 | Point 2 added: 10.00, 10.00
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-135136487174272 | finalize_measurement called with 2 points
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-135136487174272 | Setting finalized = True
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-135136487174272 | Measurement finalized: 2 points, 14.14m total distance
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-135136487174272 | Rubber band redrawn with final points only
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-135136487174272 | Switching to pan tool to stop measurement
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-135136487174272 | Pan tool activated - measurement should be frozen
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-135136487174272 | reset() called, finalized=True
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-135136487174272 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-135136487174272 | Point 1 added: 0.00, 0.00
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-135136487174272 | Point 2 added: 100.00, 100.00
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-135136487174272 | Point 3 added: 200.00, 150.00
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135136487174272 | CacheService initialized (Default TTL: 3600s)
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-135136487174272 | ProfileController initialized
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.main_dialog | _load_interpretations:565 | Thread-135136487174272 | Loaded 1 interpretations from project
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: buffer_dist = 100.0
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dem_band = 1
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: scale = 50000.0
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: vert_exag = 1.0
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dip_scale_factor = 1.0
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: dh_use_geom = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: interp_inherit_geol = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: interp_inherit_drill = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: show_topo = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: show_geol = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: show_struct = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: show_drillholes = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: show_interpretations = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: auto_lod = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: adaptive_sampling = True
2026-01-17 10:46:14 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-135136487174272 | Global setting fallback: max_points = 10000
2026-01-17 10:46:14 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-135136487174272 | Settings loaded successfully from Project/Global config
2026-01-17 05:52:07 | DEBUG    | SecInterp | setup_logging:142 | Thread-132637362858944 | Logging system initialized. Root Level: 10
2026-01-17 05:52:07 | DEBUG    | SecInterp | setup_logging:143 | Thread-132637362858944 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-17 05:52:07 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:55 | Thread-132637362858944 | Loaded 0 interpretations from project
2026-01-17 05:52:07 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:55 | Thread-132637362858944 | Loaded 1 interpretations from project
2026-01-17 05:52:26 | DEBUG    | SecInterp | setup_logging:142 | Thread-123270127496128 | Logging system initialized. Root Level: 10
2026-01-17 05:52:26 | DEBUG    | SecInterp | setup_logging:143 | Thread-123270127496128 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-17 05:52:26 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:218 | Thread-123270127496128 | Inherited attributes from geology: Limestone
2026-01-17 05:52:26 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:55 | Thread-123270127496128 | Loaded 0 interpretations from project
2026-01-17 05:52:26 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:55 | Thread-123270127496128 | Loaded 1 interpretations from project
2026-01-17 05:52:26 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:88 | Thread-123270127496128 | Saved 1 interpretations to project
2026-01-17 05:52:41 | DEBUG    | SecInterp | setup_logging:142 | Thread-129751130135488 | Logging system initialized. Root Level: 10
2026-01-17 05:52:41 | DEBUG    | SecInterp | setup_logging:143 | Thread-129751130135488 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-17 05:52:41 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:218 | Thread-129751130135488 | Inherited attributes from geology: Limestone
2026-01-17 05:52:41 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:55 | Thread-129751130135488 | Loaded 0 interpretations from project
2026-01-17 05:52:41 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:55 | Thread-129751130135488 | Loaded 1 interpretations from project
2026-01-17 05:52:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:88 | Thread-129751130135488 | Saved 1 interpretations to project
2026-01-17 05:52:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-129751130135488 | Global setting fallback: buffer_dist = 100.5
2026-01-17 05:52:41 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-129751130135488 | Persistent interpretations cleared by reset
2026-01-17 05:52:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-129751130135488 | Setting saved to project: test_layer = id_123
2026-01-17 05:52:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-129751130135488 | Setting saved to project: test_layer_name = RealName
2026-01-17 05:52:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-129751130135488 | Global setting fallback: test_layer = 1.0
2026-01-17 05:52:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-129751130135488 | Project setting hit: test_layer_name = RealName
2026-01-17 05:52:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-129751130135488 | Restoring layer: test_layer -> RealName
2026-01-17 10:53:51 | DEBUG    | SecInterp | setup_logging:142 | Thread-131323728363648 | Logging system initialized. Root Level: 10
2026-01-17 10:53:51 | DEBUG    | SecInterp | setup_logging:143 | Thread-131323728363648 | File logging path: /app/sec_interp/logs/sec_interp_debug.log
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-131323728363648 | Configuration reset to defaults initiated
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131323728363648 | Config set: SecInterp/scale = 50000.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131323728363648 | Config set: SecInterp/vert_exag = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131323728363648 | Config set: SecInterp/buffer_dist = 100.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131323728363648 | Config set: SecInterp/show_topo = True
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131323728363648 | Config set: SecInterp/show_geol = True
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131323728363648 | Config set: SecInterp/show_struct = True
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131323728363648 | Config set: SecInterp/show_drillholes = True
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131323728363648 | Config set: SecInterp/show_interpretations = True
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131323728363648 | Config set: SecInterp/interp_inherit_geol = True
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131323728363648 | Config set: SecInterp/interp_inherit_drill = True
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131323728363648 | Config set: SecInterp/dh_use_geom = True
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131323728363648 | Config set: SecInterp/auto_lod = False
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131323728363648 | Config set: SecInterp/adaptive_sampling = True
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131323728363648 | Config set: SecInterp/max_points = 10000
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131323728363648 | Config set: SecInterp/dem_band = 1
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131323728363648 | Config set: SecInterp/scale = 200.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131323728363648 | Config set: SecInterp/scale = 20000.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131323728363648 | CacheService initialized (Default TTL: 3600s)
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131323728363648 | CacheService initialized (Default TTL: 3600s)
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131323728363648 | CacheService initialized (Default TTL: 3600s)
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-131323728363648 | Projecting collars from Test Layer with buffer 50.0m
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:106 | Thread-131323728363648 | No collars found within buffer area.
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-131323728363648 | Projecting collars from Test Layer with buffer 50.0m
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:127 | Thread-131323728363648 | DrillholeService.project_collars END: Found 1 collars.
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-131323728363648 | ✓ Saving profile axes...
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-131323728363648 | ✓ Saving topographic profile...
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-131323728363648 | ✓ Saving profile axes...
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-131323728363648 | ✓ Saving interpretation data...
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-131323728363648 | 3D Export features are restricted for this user.
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-131323728363648 | ✓ Saving topographic profile...
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-131323728363648 | ✓ Saving profile axes...
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-131323728363648 | ✓ Saving interpretation data...
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-131323728363648 | ✓ Saving 3D interpretation data...
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-131323728363648 | ✓ Saving topographic profile...
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-131323728363648 | ✓ Saving profile axes...
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-131323728363648 | ✓ Saving geological profile...
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-131323728363648 | ✓ Saving structural profile...
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-131323728363648 | ✓ Saving drillhole data...
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-131323728363648 | ✓ Saving interpretation data...
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-131323728363648 | Access denied for restricted feature: 3D Export
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-131323728363648 | 3D Export features are restricted for this user.
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-131323728363648 | ✓ Saving topographic profile...
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-131323728363648 | ✓ Saving profile axes...
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-131323728363648 | No interpretations provided for export.
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-131323728363648 | ✓ Saving drillhole data...
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-131323728363648 | ✓ Saving geological profile...
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-131323728363648 | ✓ Saving interpretation data...
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-131323728363648 | ✓ Saving 3D interpretation data...
2026-01-17 10:53:52 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-131323728363648 | Invalid section line layer, skipping 3D export.
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-131323728363648 | ✓ Saving interpretation data...
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-131323728363648 | ✓ Saving structural profile...
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-131323728363648 | ✓ Saving topographic profile...
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-131323728363648 | Generating master profile with interval=10.00
2026-01-17 10:53:52 | INFO     | SecInterp.performance | measure_operation:244 | Thread-131323728363648 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.007, 'memory_mb': 0.0, 'memory_peak_mb': 0.32, 'timestamp': '2026-01-17 10:53:52', 'args_count': 5, 'kwargs_keys': []}
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-131323728363648 | Generating master profile with interval=50.00
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-131323728363648 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-131323728363648 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-131323728363648 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-131323728363648 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-131323728363648 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-131323728363648 | Running geometry operation: test
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-131323728363648 | Generated 1 drillhole traces
2026-01-17 10:53:52 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-131323728363648 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-17 10:53:52 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:251 | Thread-131323728363648 | Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-131323728363648 | Generated 1 drillhole traces
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:171 | Thread-131323728363648 | Drillhole preview skipped: No Collar ID field selected.
2026-01-17 10:53:52 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-131323728363648 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-17 10:53:52 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-131323728363648 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-17 10:53:52 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-131323728363648 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-17 10:53:52 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-131323728363648 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-17 10:53:52 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-131323728363648 | Buffer creation failed
Traceback (most recent call last):
  File "/app/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-131323728363648 | Analyzing structures in Structure Layer with buffer 10m
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-131323728363648 | Processed 1 structural measurements from Structure Layer
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-131323728363648 | Successfully exported to /tmp/test_dynamic.shp
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-131323728363648 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-131323728363648 | Generated QML style: /tmp/test.qml
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-131323728363648 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-131323728363648 | Generated QML style: dummy.qml
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-131323728363648 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-131323728363648 | Generated QML style: dummy.qml
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:55 | Thread-131323728363648 | Loaded 0 interpretations from project
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:55 | Thread-131323728363648 | Loaded 0 interpretations from project
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: section_layer = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: section_layer_name = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-131323728363648 | Failed to restore layer for section_layer
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: buffer_dist = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dem_layer = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dem_layer_name = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-131323728363648 | Failed to restore layer for dem_layer
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dem_band = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: scale = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: vert_exag = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: geol_layer = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: geol_layer_name = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-131323728363648 | Failed to restore layer for geol_layer
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: geol_field = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: struct_layer = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: struct_layer_name = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-131323728363648 | Failed to restore layer for struct_layer
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: struct_dip_field = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: struct_strike_field = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dip_scale_factor = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dh_collar_layer = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-131323728363648 | Failed to restore layer for dh_collar_layer
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dh_collar_id = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dh_use_geom = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dh_collar_x = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dh_collar_y = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dh_collar_z = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dh_collar_depth = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dh_survey_layer = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-131323728363648 | Failed to restore layer for dh_survey_layer
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dh_survey_id = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dh_survey_depth = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dh_survey_azim = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dh_survey_incl = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dh_interval_layer = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-131323728363648 | Failed to restore layer for dh_interval_layer
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dh_interval_id = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dh_interval_from = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dh_interval_to = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dh_interval_lith = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: last_output_dir = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: interp_custom_fields = 1.0
2026-01-17 10:53:52 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-131323728363648 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: show_topo = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: show_geol = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: show_struct = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: show_drillholes = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: show_interpretations = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: auto_lod = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: adaptive_sampling = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: max_points = 1.0
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-131323728363648 | Settings loaded successfully from Project/Global config
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:344 | Thread-131323728363648 | Cache cleared by user
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-131323728363648 | GeologyGenerationTask started (Background Thread)
2026-01-17 10:53:52 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-131323728363648 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/app/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-131323728363648 | GeologyGenerationTask started (Background Thread)
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-131323728363648 | GeologyGenerationTask finished with 1 segments
2026-01-17 10:53:52 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-131323728363648 | Test Title: Test Message
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-131323728363648 | Test Title: Test Message
2026-01-17 10:53:52 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-131323728363648 | Test Title: Test Message
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-131323728363648 | CRITICAL_OP: finalize_polygon | points=2
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-131323728363648 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-17 10:53:52 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-131323728363648 | finalize_polygon() aborted - less than 3 points
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-131323728363648 | CRITICAL_OP: finalize_polygon | points=3
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-131323728363648 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-131323728363648 | finalize_polygon() - emitting polygonFinished signal for 4d7b7be2-526b-4b8a-a285-1c6900f49cac
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-131323728363648 | Interpretation polygon finalized with 3 vertices, ID: 4d7b7be2-526b-4b8a-a285-1c6900f49cac
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-131323728363648 | finalize_polygon() completed
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-131323728363648 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-131323728363648 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-131323728363648 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-131323728363648 | ProfileInterpretationTool.reset() completed
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-131323728363648 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-131323728363648 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-131323728363648 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-131323728363648 | ProfileInterpretationTool.reset() completed
2026-01-17 10:53:52 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-131323728363648 | Failed to create locator for layer layer1: mock error
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-131323728363648 | ProfileInterpretationTool.activate() called
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-131323728363648 | ProfileInterpretationTool activated successfully
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-131323728363648 | ProfileInterpretationTool.deactivate() called
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-131323728363648 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-131323728363648 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-131323728363648 | ProfileInterpretationTool.reset() completed
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-131323728363648 | ProfileInterpretationTool deactivated successfully
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:218 | Thread-131323728363648 | Inherited attributes from geology: Limestone
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:55 | Thread-131323728363648 | Loaded 0 interpretations from project
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:55 | Thread-131323728363648 | Loaded 1 interpretations from project
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:88 | Thread-131323728363648 | Saved 1 interpretations to project
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: buffer_dist = 100.5
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-131323728363648 | Persistent interpretations cleared by reset
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-131323728363648 | Setting saved to project: test_layer = id_123
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-131323728363648 | Setting saved to project: test_layer_name = RealName
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: test_layer = 1.0
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-131323728363648 | Project setting hit: test_layer_name = RealName
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-131323728363648 | Restoring layer: test_layer -> RealName
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-131323728363648 | Point 1 added: 0.00, 0.00
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-131323728363648 | Point 2 added: 100.00, 100.00
2026-01-17 10:53:52 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-131323728363648 | Point 1 added: 50.00, 50.00
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-131323728363648 | reset() called, finalized=False
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-131323728363648 | finalize_measurement called with 1 points
2026-01-17 10:53:52 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-131323728363648 | Cannot finalize measurement with less than 2 points
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-131323728363648 | finalize_measurement called with 2 points
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-131323728363648 | Setting finalized = True
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-131323728363648 | Measurement finalized: 2 points, 100.00m total distance
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-131323728363648 | Switching to pan tool to stop measurement
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-131323728363648 | Pan tool activated - measurement should be frozen
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-131323728363648 | Ignoring click - measurement is finalized
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-131323728363648 | finalize_measurement called with 2 points
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-131323728363648 | Setting finalized = True
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-131323728363648 | Measurement finalized: 2 points, 100.00m total distance
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-131323728363648 | Switching to pan tool to stop measurement
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-131323728363648 | Pan tool activated - measurement should be frozen
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-131323728363648 | reset() called, finalized=False
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-131323728363648 | reset() called, finalized=False
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-131323728363648 | reset() called, finalized=True
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-131323728363648 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-17 10:53:52 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-131323728363648 | reset() called, finalized=False
2026-01-17 10:53:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-131323728363648 | finalize_measurement called with 2 points
2026-01-17 10:53:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-131323728363648 | Setting finalized = True
2026-01-17 10:53:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-131323728363648 | Measurement finalized: 2 points, 100.00m total distance
2026-01-17 10:53:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-131323728363648 | Rubber band redrawn with final points only
2026-01-17 10:53:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-131323728363648 | Switching to pan tool to stop measurement
2026-01-17 10:53:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-131323728363648 | Pan tool activated - measurement should be frozen
2026-01-17 10:53:53 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-131323728363648 | Failed to create locator for layer layer1: mock error
2026-01-17 10:53:53 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-131323728363648 | Failed to create locator for layer l2: fail
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-131323728363648 | ProfileMeasureTool activated
2026-01-17 10:53:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-131323728363648 | reset() called, finalized=False
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-131323728363648 | ProfileMeasureTool deactivated
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-131323728363648 | create_drillhole_trace_layer called with 1 holes
2026-01-17 10:53:53 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-131323728363648 | Adding 1 drillhole trace features to layer
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-131323728363648 | create_drillhole_trace_layer called with 1 holes
2026-01-17 10:53:53 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-131323728363648 | Adding 1 drillhole trace features to layer
2026-01-17 10:53:53 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-131323728363648 | Failed to create memory layer: Fail
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-131323728363648 | create_drillhole_trace_layer called with 0 holes
2026-01-17 10:53:53 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-131323728363648 | No drillhole data provided for trace layer
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-131323728363648 | create_drillhole_trace_layer called with 1 holes
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-131323728363648 | Skipping hole H1: insufficient trace points (1)
2026-01-17 10:53:53 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-131323728363648 | Adding 0 drillhole trace features to layer
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-131323728363648 | create_drillhole_trace_layer called with 1 holes
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131323728363648 | render() called
2026-01-17 10:53:53 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-131323728363648 | No valid layers to render
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131323728363648 | render() called
2026-01-17 10:53:53 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-131323728363648 | Error exporting preview
Traceback (most recent call last):
  File "/app/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
               ^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131323728363648 | render() called
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131323728363648 | render() called
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131323728363648 | render() called
2026-01-17 10:53:53 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-131323728363648 | No valid layers to render
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131323728363648 | render() called
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131323728363648 | render() called
2026-01-17 10:53:53 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-131323728363648 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-17 10:53:53 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-131323728363648 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131323728363648 | CacheService initialized (Default TTL: 3600s)
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-131323728363648 | ProfileController initialized
2026-01-17 10:53:53 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:55 | Thread-131323728363648 | Loaded 0 interpretations from project
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: buffer_dist = 100.0
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dem_band = 1
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: scale = 50000.0
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: vert_exag = 1.0
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dip_scale_factor = 1.0
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dh_use_geom = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: interp_inherit_geol = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: interp_inherit_drill = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: show_topo = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: show_geol = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: show_struct = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: show_drillholes = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: show_interpretations = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: auto_lod = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: adaptive_sampling = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: max_points = 10000
2026-01-17 10:53:53 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-131323728363648 | Settings loaded successfully from Project/Global config
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131323728363648 | CacheService initialized (Default TTL: 3600s)
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-131323728363648 | ProfileController initialized
2026-01-17 10:53:53 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:55 | Thread-131323728363648 | Loaded 0 interpretations from project
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: buffer_dist = 100.0
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dem_band = 1
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: scale = 50000.0
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: vert_exag = 1.0
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dip_scale_factor = 1.0
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dh_use_geom = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: interp_inherit_geol = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: interp_inherit_drill = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: show_topo = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: show_geol = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: show_struct = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: show_drillholes = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: show_interpretations = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: auto_lod = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: adaptive_sampling = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: max_points = 10000
2026-01-17 10:53:53 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-131323728363648 | Settings loaded successfully from Project/Global config
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131323728363648 | CacheService initialized (Default TTL: 3600s)
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-131323728363648 | ProfileController initialized
2026-01-17 10:53:53 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:55 | Thread-131323728363648 | Loaded 0 interpretations from project
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: buffer_dist = 100.0
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dem_band = 1
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: scale = 50000.0
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: vert_exag = 1.0
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dip_scale_factor = 1.0
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dh_use_geom = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: interp_inherit_geol = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: interp_inherit_drill = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: show_topo = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: show_geol = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: show_struct = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: show_drillholes = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: show_interpretations = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: auto_lod = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: adaptive_sampling = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: max_points = 10000
2026-01-17 10:53:53 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-131323728363648 | Settings loaded successfully from Project/Global config
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-131323728363648 | Point 1 added: 0.00, 0.00
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-131323728363648 | Point 2 added: 10.00, 10.00
2026-01-17 10:53:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-131323728363648 | finalize_measurement called with 2 points
2026-01-17 10:53:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-131323728363648 | Setting finalized = True
2026-01-17 10:53:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-131323728363648 | Measurement finalized: 2 points, 14.14m total distance
2026-01-17 10:53:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-131323728363648 | Rubber band redrawn with final points only
2026-01-17 10:53:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-131323728363648 | Switching to pan tool to stop measurement
2026-01-17 10:53:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-131323728363648 | Pan tool activated - measurement should be frozen
2026-01-17 10:53:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-131323728363648 | reset() called, finalized=True
2026-01-17 10:53:53 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-131323728363648 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-131323728363648 | Point 1 added: 0.00, 0.00
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-131323728363648 | Point 2 added: 100.00, 100.00
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-131323728363648 | Point 3 added: 200.00, 150.00
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131323728363648 | CacheService initialized (Default TTL: 3600s)
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-131323728363648 | ProfileController initialized
2026-01-17 10:53:53 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:55 | Thread-131323728363648 | Loaded 1 interpretations from project
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: buffer_dist = 100.0
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dem_band = 1
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: scale = 50000.0
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: vert_exag = 1.0
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dip_scale_factor = 1.0
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: dh_use_geom = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: interp_inherit_geol = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: interp_inherit_drill = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: show_topo = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: show_geol = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: show_struct = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: show_drillholes = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: show_interpretations = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: auto_lod = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: adaptive_sampling = True
2026-01-17 10:53:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-131323728363648 | Global setting fallback: max_points = 10000
2026-01-17 10:53:53 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-131323728363648 | Settings loaded successfully from Project/Global config
2026-01-17 10:55:39 | DEBUG    | SecInterp | setup_logging:142 | Thread-123741689405568 | Logging system initialized. Root Level: 10
2026-01-17 10:55:39 | DEBUG    | SecInterp | setup_logging:143 | Thread-123741689405568 | File logging path: /app/sec_interp/logs/sec_interp_debug.log
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-123741689405568 | Configuration reset to defaults initiated
2026-01-17 10:55:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123741689405568 | Config set: SecInterp/scale = 50000.0
2026-01-17 10:55:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123741689405568 | Config set: SecInterp/vert_exag = 1.0
2026-01-17 10:55:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123741689405568 | Config set: SecInterp/buffer_dist = 100.0
2026-01-17 10:55:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123741689405568 | Config set: SecInterp/show_topo = True
2026-01-17 10:55:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123741689405568 | Config set: SecInterp/show_geol = True
2026-01-17 10:55:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123741689405568 | Config set: SecInterp/show_struct = True
2026-01-17 10:55:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123741689405568 | Config set: SecInterp/show_drillholes = True
2026-01-17 10:55:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123741689405568 | Config set: SecInterp/show_interpretations = True
2026-01-17 10:55:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123741689405568 | Config set: SecInterp/interp_inherit_geol = True
2026-01-17 10:55:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123741689405568 | Config set: SecInterp/interp_inherit_drill = True
2026-01-17 10:55:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123741689405568 | Config set: SecInterp/dh_use_geom = True
2026-01-17 10:55:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123741689405568 | Config set: SecInterp/auto_lod = False
2026-01-17 10:55:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123741689405568 | Config set: SecInterp/adaptive_sampling = True
2026-01-17 10:55:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123741689405568 | Config set: SecInterp/max_points = 10000
2026-01-17 10:55:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123741689405568 | Config set: SecInterp/dem_band = 1
2026-01-17 10:55:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123741689405568 | Config set: SecInterp/scale = 200.0
2026-01-17 10:55:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-123741689405568 | Config set: SecInterp/scale = 20000.0
2026-01-17 10:55:39 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123741689405568 | CacheService initialized (Default TTL: 3600s)
2026-01-17 10:55:39 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123741689405568 | CacheService initialized (Default TTL: 3600s)
2026-01-17 10:55:39 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123741689405568 | CacheService initialized (Default TTL: 3600s)
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-123741689405568 | Projecting collars from Test Layer with buffer 50.0m
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:106 | Thread-123741689405568 | No collars found within buffer area.
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-123741689405568 | Projecting collars from Test Layer with buffer 50.0m
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:127 | Thread-123741689405568 | DrillholeService.project_collars END: Found 1 collars.
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-123741689405568 | ✓ Saving profile axes...
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-123741689405568 | ✓ Saving topographic profile...
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-123741689405568 | ✓ Saving profile axes...
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-123741689405568 | ✓ Saving interpretation data...
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-123741689405568 | 3D Export features are restricted for this user.
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-123741689405568 | ✓ Saving topographic profile...
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-123741689405568 | ✓ Saving profile axes...
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-123741689405568 | ✓ Saving interpretation data...
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-123741689405568 | ✓ Saving 3D interpretation data...
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-123741689405568 | ✓ Saving topographic profile...
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-123741689405568 | ✓ Saving profile axes...
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-123741689405568 | ✓ Saving geological profile...
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-123741689405568 | ✓ Saving structural profile...
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-123741689405568 | ✓ Saving drillhole data...
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-123741689405568 | ✓ Saving interpretation data...
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-123741689405568 | Access denied for restricted feature: 3D Export
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-123741689405568 | 3D Export features are restricted for this user.
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-123741689405568 | ✓ Saving topographic profile...
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-123741689405568 | ✓ Saving profile axes...
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-123741689405568 | No interpretations provided for export.
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-123741689405568 | ✓ Saving drillhole data...
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-123741689405568 | ✓ Saving geological profile...
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-123741689405568 | ✓ Saving interpretation data...
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-123741689405568 | ✓ Saving 3D interpretation data...
2026-01-17 10:55:39 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-123741689405568 | Invalid section line layer, skipping 3D export.
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-123741689405568 | ✓ Saving interpretation data...
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-123741689405568 | ✓ Saving structural profile...
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-123741689405568 | ✓ Saving topographic profile...
2026-01-17 10:55:39 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-123741689405568 | Generating master profile with interval=10.00
2026-01-17 10:55:39 | INFO     | SecInterp.performance | measure_operation:244 | Thread-123741689405568 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0066, 'memory_mb': 0.0, 'memory_peak_mb': 0.32, 'timestamp': '2026-01-17 10:55:39', 'args_count': 5, 'kwargs_keys': []}
2026-01-17 10:55:39 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-123741689405568 | Generating master profile with interval=50.00
2026-01-17 10:55:39 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-123741689405568 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-17 10:55:39 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-123741689405568 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-17 10:55:39 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-123741689405568 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-17 10:55:39 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-123741689405568 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-17 10:55:39 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-123741689405568 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-17 10:55:39 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-123741689405568 | Running geometry operation: test
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-123741689405568 | Generated 1 drillhole traces
2026-01-17 10:55:39 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-123741689405568 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-17 10:55:39 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:251 | Thread-123741689405568 | Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-123741689405568 | Generated 1 drillhole traces
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:171 | Thread-123741689405568 | Drillhole preview skipped: No Collar ID field selected.
2026-01-17 10:55:39 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-123741689405568 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-17 10:55:39 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-123741689405568 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-17 10:55:39 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-123741689405568 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-17 10:55:39 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-123741689405568 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-17 10:55:39 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-123741689405568 | Buffer creation failed
Traceback (most recent call last):
  File "/app/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-123741689405568 | Analyzing structures in Structure Layer with buffer 10m
2026-01-17 10:55:39 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-123741689405568 | Processed 1 structural measurements from Structure Layer
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-123741689405568 | Successfully exported to /tmp/test_dynamic.shp
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-123741689405568 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-123741689405568 | Generated QML style: /tmp/test.qml
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-123741689405568 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-123741689405568 | Generated QML style: dummy.qml
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-123741689405568 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-123741689405568 | Generated QML style: dummy.qml
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:55 | Thread-123741689405568 | Loaded 0 interpretations from project
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:55 | Thread-123741689405568 | Loaded 0 interpretations from project
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: section_layer = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: section_layer_name = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-123741689405568 | Failed to restore layer for section_layer
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: buffer_dist = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dem_layer = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dem_layer_name = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-123741689405568 | Failed to restore layer for dem_layer
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dem_band = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: scale = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: vert_exag = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: geol_layer = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: geol_layer_name = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-123741689405568 | Failed to restore layer for geol_layer
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: geol_field = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: struct_layer = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: struct_layer_name = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-123741689405568 | Failed to restore layer for struct_layer
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: struct_dip_field = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: struct_strike_field = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dip_scale_factor = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dh_collar_layer = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-123741689405568 | Failed to restore layer for dh_collar_layer
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dh_collar_id = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dh_use_geom = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dh_collar_x = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dh_collar_y = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dh_collar_z = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dh_collar_depth = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dh_survey_layer = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-123741689405568 | Failed to restore layer for dh_survey_layer
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dh_survey_id = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dh_survey_depth = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dh_survey_azim = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dh_survey_incl = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dh_interval_layer = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-123741689405568 | Failed to restore layer for dh_interval_layer
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dh_interval_id = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dh_interval_from = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dh_interval_to = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dh_interval_lith = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: last_output_dir = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: interp_custom_fields = 1.0
2026-01-17 10:55:40 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-123741689405568 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: show_topo = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: show_geol = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: show_struct = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: show_drillholes = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: show_interpretations = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: auto_lod = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: adaptive_sampling = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: max_points = 1.0
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-123741689405568 | Settings loaded successfully from Project/Global config
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:344 | Thread-123741689405568 | Cache cleared by user
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-123741689405568 | GeologyGenerationTask started (Background Thread)
2026-01-17 10:55:40 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-123741689405568 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/app/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-123741689405568 | GeologyGenerationTask started (Background Thread)
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-123741689405568 | GeologyGenerationTask finished with 1 segments
2026-01-17 10:55:40 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-123741689405568 | Test Title: Test Message
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-123741689405568 | Test Title: Test Message
2026-01-17 10:55:40 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-123741689405568 | Test Title: Test Message
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-123741689405568 | CRITICAL_OP: finalize_polygon | points=2
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-123741689405568 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-17 10:55:40 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-123741689405568 | finalize_polygon() aborted - less than 3 points
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-123741689405568 | CRITICAL_OP: finalize_polygon | points=3
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-123741689405568 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-123741689405568 | finalize_polygon() - emitting polygonFinished signal for e0ab2b0a-178e-4365-ba65-228712770fd7
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-123741689405568 | Interpretation polygon finalized with 3 vertices, ID: e0ab2b0a-178e-4365-ba65-228712770fd7
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-123741689405568 | finalize_polygon() completed
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-123741689405568 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-123741689405568 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-123741689405568 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-123741689405568 | ProfileInterpretationTool.reset() completed
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-123741689405568 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-123741689405568 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-123741689405568 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-123741689405568 | ProfileInterpretationTool.reset() completed
2026-01-17 10:55:40 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-123741689405568 | Failed to create locator for layer layer1: mock error
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-123741689405568 | ProfileInterpretationTool.activate() called
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-123741689405568 | ProfileInterpretationTool activated successfully
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-123741689405568 | ProfileInterpretationTool.deactivate() called
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-123741689405568 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-123741689405568 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-123741689405568 | ProfileInterpretationTool.reset() completed
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-123741689405568 | ProfileInterpretationTool deactivated successfully
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:218 | Thread-123741689405568 | Inherited attributes from geology: Limestone
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:55 | Thread-123741689405568 | Loaded 0 interpretations from project
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:55 | Thread-123741689405568 | Loaded 1 interpretations from project
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:88 | Thread-123741689405568 | Saved 1 interpretations to project
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: buffer_dist = 100.5
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-123741689405568 | Persistent interpretations cleared by reset
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-123741689405568 | Setting saved to project: test_layer = id_123
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-123741689405568 | Setting saved to project: test_layer_name = RealName
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: test_layer = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-123741689405568 | Project setting hit: test_layer_name = RealName
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-123741689405568 | Restoring layer: test_layer -> RealName
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-123741689405568 | Point 1 added: 0.00, 0.00
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-123741689405568 | Point 2 added: 100.00, 100.00
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-123741689405568 | Point 1 added: 50.00, 50.00
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-123741689405568 | reset() called, finalized=False
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-123741689405568 | finalize_measurement called with 1 points
2026-01-17 10:55:40 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-123741689405568 | Cannot finalize measurement with less than 2 points
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-123741689405568 | finalize_measurement called with 2 points
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-123741689405568 | Setting finalized = True
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-123741689405568 | Measurement finalized: 2 points, 100.00m total distance
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-123741689405568 | Switching to pan tool to stop measurement
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-123741689405568 | Pan tool activated - measurement should be frozen
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-123741689405568 | Ignoring click - measurement is finalized
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-123741689405568 | finalize_measurement called with 2 points
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-123741689405568 | Setting finalized = True
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-123741689405568 | Measurement finalized: 2 points, 100.00m total distance
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-123741689405568 | Switching to pan tool to stop measurement
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-123741689405568 | Pan tool activated - measurement should be frozen
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-123741689405568 | reset() called, finalized=False
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-123741689405568 | reset() called, finalized=False
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-123741689405568 | reset() called, finalized=True
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-123741689405568 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-123741689405568 | reset() called, finalized=False
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-123741689405568 | finalize_measurement called with 2 points
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-123741689405568 | Setting finalized = True
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-123741689405568 | Measurement finalized: 2 points, 100.00m total distance
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-123741689405568 | Rubber band redrawn with final points only
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-123741689405568 | Switching to pan tool to stop measurement
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-123741689405568 | Pan tool activated - measurement should be frozen
2026-01-17 10:55:40 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-123741689405568 | Failed to create locator for layer layer1: mock error
2026-01-17 10:55:40 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-123741689405568 | Failed to create locator for layer l2: fail
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-123741689405568 | ProfileMeasureTool activated
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-123741689405568 | reset() called, finalized=False
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-123741689405568 | ProfileMeasureTool deactivated
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-123741689405568 | create_drillhole_trace_layer called with 1 holes
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-123741689405568 | Adding 1 drillhole trace features to layer
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-123741689405568 | create_drillhole_trace_layer called with 1 holes
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-123741689405568 | Adding 1 drillhole trace features to layer
2026-01-17 10:55:40 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-123741689405568 | Failed to create memory layer: Fail
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-123741689405568 | create_drillhole_trace_layer called with 0 holes
2026-01-17 10:55:40 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-123741689405568 | No drillhole data provided for trace layer
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-123741689405568 | create_drillhole_trace_layer called with 1 holes
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-123741689405568 | Skipping hole H1: insufficient trace points (1)
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-123741689405568 | Adding 0 drillhole trace features to layer
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-123741689405568 | create_drillhole_trace_layer called with 1 holes
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123741689405568 | render() called
2026-01-17 10:55:40 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-123741689405568 | No valid layers to render
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123741689405568 | render() called
2026-01-17 10:55:40 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-123741689405568 | Error exporting preview
Traceback (most recent call last):
  File "/app/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
               ^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123741689405568 | render() called
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123741689405568 | render() called
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123741689405568 | render() called
2026-01-17 10:55:40 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-123741689405568 | No valid layers to render
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123741689405568 | render() called
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-123741689405568 | render() called
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-123741689405568 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-123741689405568 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123741689405568 | CacheService initialized (Default TTL: 3600s)
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-123741689405568 | ProfileController initialized
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:55 | Thread-123741689405568 | Loaded 0 interpretations from project
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: buffer_dist = 100.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dem_band = 1
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: scale = 50000.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: vert_exag = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dip_scale_factor = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dh_use_geom = True
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: interp_inherit_geol = True
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: interp_inherit_drill = True
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: show_topo = True
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: show_geol = True
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: show_struct = True
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: show_drillholes = True
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: show_interpretations = True
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: auto_lod = True
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: adaptive_sampling = True
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: max_points = 10000
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-123741689405568 | Settings loaded successfully from Project/Global config
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:88 | Thread-123741689405568 | Saved 1 interpretations to project
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123741689405568 | CacheService initialized (Default TTL: 3600s)
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-123741689405568 | ProfileController initialized
2026-01-17 10:55:40 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:55 | Thread-123741689405568 | Loaded 0 interpretations from project
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: buffer_dist = 100.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dem_band = 1
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: scale = 50000.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: vert_exag = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dip_scale_factor = 1.0
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dh_use_geom = True
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: interp_inherit_geol = True
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: interp_inherit_drill = True
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: show_topo = True
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: show_geol = True
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: show_struct = True
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: show_drillholes = True
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: show_interpretations = True
2026-01-17 10:55:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: auto_lod = True
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: adaptive_sampling = True
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: max_points = 10000
2026-01-17 10:55:41 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-123741689405568 | Settings loaded successfully from Project/Global config
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:88 | Thread-123741689405568 | Saved 1 interpretations to project
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:88 | Thread-123741689405568 | Saved 1 interpretations to project
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123741689405568 | CacheService initialized (Default TTL: 3600s)
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-123741689405568 | ProfileController initialized
2026-01-17 10:55:41 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:55 | Thread-123741689405568 | Loaded 0 interpretations from project
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: buffer_dist = 100.0
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dem_band = 1
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: scale = 50000.0
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: vert_exag = 1.0
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dip_scale_factor = 1.0
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dh_use_geom = True
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: interp_inherit_geol = True
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: interp_inherit_drill = True
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: show_topo = True
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: show_geol = True
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: show_struct = True
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: show_drillholes = True
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: show_interpretations = True
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: auto_lod = True
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: adaptive_sampling = True
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: max_points = 10000
2026-01-17 10:55:41 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-123741689405568 | Settings loaded successfully from Project/Global config
2026-01-17 10:55:41 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:55 | Thread-123741689405568 | Loaded 1 interpretations from project
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-123741689405568 | Point 1 added: 0.00, 0.00
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-123741689405568 | Point 2 added: 10.00, 10.00
2026-01-17 10:55:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-123741689405568 | finalize_measurement called with 2 points
2026-01-17 10:55:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-123741689405568 | Setting finalized = True
2026-01-17 10:55:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-123741689405568 | Measurement finalized: 2 points, 14.14m total distance
2026-01-17 10:55:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-123741689405568 | Rubber band redrawn with final points only
2026-01-17 10:55:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-123741689405568 | Switching to pan tool to stop measurement
2026-01-17 10:55:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-123741689405568 | Pan tool activated - measurement should be frozen
2026-01-17 10:55:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-123741689405568 | reset() called, finalized=True
2026-01-17 10:55:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-123741689405568 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-123741689405568 | Point 1 added: 0.00, 0.00
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-123741689405568 | Point 2 added: 100.00, 100.00
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-123741689405568 | Point 3 added: 200.00, 150.00
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-123741689405568 | CacheService initialized (Default TTL: 3600s)
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-123741689405568 | ProfileController initialized
2026-01-17 10:55:41 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:55 | Thread-123741689405568 | Loaded 1 interpretations from project
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: buffer_dist = 100.0
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dem_band = 1
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: scale = 50000.0
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: vert_exag = 1.0
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dip_scale_factor = 1.0
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: dh_use_geom = True
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: interp_inherit_geol = True
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: interp_inherit_drill = True
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: show_topo = True
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: show_geol = True
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: show_struct = True
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: show_drillholes = True
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: show_interpretations = True
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: auto_lod = True
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: adaptive_sampling = True
2026-01-17 10:55:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-123741689405568 | Global setting fallback: max_points = 10000
2026-01-17 10:55:41 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-123741689405568 | Settings loaded successfully from Project/Global config
2026-01-17 10:57:06 | DEBUG    | SecInterp | setup_logging:142 | Thread-126066311200896 | Logging system initialized. Root Level: 10
2026-01-17 10:57:06 | DEBUG    | SecInterp | setup_logging:143 | Thread-126066311200896 | File logging path: /app/sec_interp/logs/sec_interp_debug.log
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-126066311200896 | Configuration reset to defaults initiated
2026-01-17 10:57:06 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126066311200896 | Config set: SecInterp/scale = 50000.0
2026-01-17 10:57:06 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126066311200896 | Config set: SecInterp/vert_exag = 1.0
2026-01-17 10:57:06 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126066311200896 | Config set: SecInterp/buffer_dist = 100.0
2026-01-17 10:57:06 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126066311200896 | Config set: SecInterp/show_topo = True
2026-01-17 10:57:06 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126066311200896 | Config set: SecInterp/show_geol = True
2026-01-17 10:57:06 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126066311200896 | Config set: SecInterp/show_struct = True
2026-01-17 10:57:06 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126066311200896 | Config set: SecInterp/show_drillholes = True
2026-01-17 10:57:06 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126066311200896 | Config set: SecInterp/show_interpretations = True
2026-01-17 10:57:06 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126066311200896 | Config set: SecInterp/interp_inherit_geol = True
2026-01-17 10:57:06 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126066311200896 | Config set: SecInterp/interp_inherit_drill = True
2026-01-17 10:57:06 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126066311200896 | Config set: SecInterp/dh_use_geom = True
2026-01-17 10:57:06 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126066311200896 | Config set: SecInterp/auto_lod = False
2026-01-17 10:57:06 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126066311200896 | Config set: SecInterp/adaptive_sampling = True
2026-01-17 10:57:06 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126066311200896 | Config set: SecInterp/max_points = 10000
2026-01-17 10:57:06 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126066311200896 | Config set: SecInterp/dem_band = 1
2026-01-17 10:57:06 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126066311200896 | Config set: SecInterp/scale = 200.0
2026-01-17 10:57:06 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126066311200896 | Config set: SecInterp/scale = 20000.0
2026-01-17 10:57:06 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126066311200896 | CacheService initialized (Default TTL: 3600s)
2026-01-17 10:57:06 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126066311200896 | CacheService initialized (Default TTL: 3600s)
2026-01-17 10:57:06 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126066311200896 | CacheService initialized (Default TTL: 3600s)
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-126066311200896 | Projecting collars from Test Layer with buffer 50.0m
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:106 | Thread-126066311200896 | No collars found within buffer area.
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-126066311200896 | Projecting collars from Test Layer with buffer 50.0m
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:127 | Thread-126066311200896 | DrillholeService.project_collars END: Found 1 collars.
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-126066311200896 | ✓ Saving profile axes...
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-126066311200896 | ✓ Saving topographic profile...
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-126066311200896 | ✓ Saving profile axes...
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-126066311200896 | ✓ Saving interpretation data...
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-126066311200896 | 3D Export features are restricted for this user.
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-126066311200896 | ✓ Saving topographic profile...
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-126066311200896 | ✓ Saving profile axes...
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-126066311200896 | ✓ Saving interpretation data...
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-126066311200896 | ✓ Saving 3D interpretation data...
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-126066311200896 | ✓ Saving topographic profile...
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-126066311200896 | ✓ Saving profile axes...
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-126066311200896 | ✓ Saving geological profile...
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-126066311200896 | ✓ Saving structural profile...
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-126066311200896 | ✓ Saving drillhole data...
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-126066311200896 | ✓ Saving interpretation data...
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-126066311200896 | Access denied for restricted feature: 3D Export
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-126066311200896 | 3D Export features are restricted for this user.
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-126066311200896 | ✓ Saving topographic profile...
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-126066311200896 | ✓ Saving profile axes...
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-126066311200896 | No interpretations provided for export.
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-126066311200896 | ✓ Saving drillhole data...
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-126066311200896 | ✓ Saving geological profile...
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-126066311200896 | ✓ Saving interpretation data...
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-126066311200896 | ✓ Saving 3D interpretation data...
2026-01-17 10:57:06 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-126066311200896 | Invalid section line layer, skipping 3D export.
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-126066311200896 | ✓ Saving interpretation data...
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-126066311200896 | ✓ Saving structural profile...
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-126066311200896 | ✓ Saving topographic profile...
2026-01-17 10:57:06 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-126066311200896 | Generating master profile with interval=10.00
2026-01-17 10:57:06 | INFO     | SecInterp.performance | measure_operation:244 | Thread-126066311200896 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0069, 'memory_mb': 0.0, 'memory_peak_mb': 0.32, 'timestamp': '2026-01-17 10:57:06', 'args_count': 5, 'kwargs_keys': []}
2026-01-17 10:57:06 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-126066311200896 | Generating master profile with interval=50.00
2026-01-17 10:57:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-126066311200896 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-17 10:57:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-126066311200896 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-17 10:57:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-126066311200896 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-17 10:57:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-126066311200896 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-17 10:57:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-126066311200896 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-17 10:57:06 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-126066311200896 | Running geometry operation: test
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-126066311200896 | Generated 1 drillhole traces
2026-01-17 10:57:06 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-126066311200896 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-17 10:57:06 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:251 | Thread-126066311200896 | Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-126066311200896 | Generated 1 drillhole traces
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:171 | Thread-126066311200896 | Drillhole preview skipped: No Collar ID field selected.
2026-01-17 10:57:06 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-126066311200896 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-17 10:57:06 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-126066311200896 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-17 10:57:06 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-126066311200896 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-17 10:57:06 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-126066311200896 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-17 10:57:06 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-126066311200896 | Buffer creation failed
Traceback (most recent call last):
  File "/app/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-126066311200896 | Analyzing structures in Structure Layer with buffer 10m
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-126066311200896 | Processed 1 structural measurements from Structure Layer
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-126066311200896 | Successfully exported to /tmp/test_dynamic.shp
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-126066311200896 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-126066311200896 | Generated QML style: /tmp/test.qml
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-126066311200896 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-126066311200896 | Generated QML style: dummy.qml
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-126066311200896 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-17 10:57:06 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-126066311200896 | Generated QML style: dummy.qml
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:55 | Thread-126066311200896 | Loaded 0 interpretations from project
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:218 | Thread-126066311200896 | Inherited attributes from geology: GeologyUnit
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:55 | Thread-126066311200896 | Loaded 0 interpretations from project
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: section_layer = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: section_layer_name = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-126066311200896 | Failed to restore layer for section_layer
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: buffer_dist = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dem_layer = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dem_layer_name = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-126066311200896 | Failed to restore layer for dem_layer
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dem_band = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: scale = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: vert_exag = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: geol_layer = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: geol_layer_name = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-126066311200896 | Failed to restore layer for geol_layer
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: geol_field = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: struct_layer = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: struct_layer_name = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-126066311200896 | Failed to restore layer for struct_layer
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: struct_dip_field = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: struct_strike_field = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dip_scale_factor = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dh_collar_layer = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-126066311200896 | Failed to restore layer for dh_collar_layer
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dh_collar_id = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dh_use_geom = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dh_collar_x = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dh_collar_y = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dh_collar_z = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dh_collar_depth = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dh_survey_layer = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-126066311200896 | Failed to restore layer for dh_survey_layer
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dh_survey_id = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dh_survey_depth = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dh_survey_azim = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dh_survey_incl = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dh_interval_layer = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-126066311200896 | Failed to restore layer for dh_interval_layer
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dh_interval_id = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dh_interval_from = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dh_interval_to = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dh_interval_lith = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: last_output_dir = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: interp_custom_fields = 1.0
2026-01-17 10:57:07 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-126066311200896 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: show_topo = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: show_geol = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: show_struct = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: show_drillholes = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: show_interpretations = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: auto_lod = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: adaptive_sampling = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: max_points = 1.0
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-126066311200896 | Settings loaded successfully from Project/Global config
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:344 | Thread-126066311200896 | Cache cleared by user
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-126066311200896 | GeologyGenerationTask started (Background Thread)
2026-01-17 10:57:07 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-126066311200896 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/app/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-126066311200896 | GeologyGenerationTask started (Background Thread)
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-126066311200896 | GeologyGenerationTask finished with 1 segments
2026-01-17 10:57:07 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-126066311200896 | Test Title: Test Message
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-126066311200896 | Test Title: Test Message
2026-01-17 10:57:07 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-126066311200896 | Test Title: Test Message
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-126066311200896 | CRITICAL_OP: finalize_polygon | points=2
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-126066311200896 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-17 10:57:07 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-126066311200896 | finalize_polygon() aborted - less than 3 points
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-126066311200896 | CRITICAL_OP: finalize_polygon | points=3
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-126066311200896 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-126066311200896 | finalize_polygon() - emitting polygonFinished signal for a266c14d-1a27-4591-a894-631066f3b7b0
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-126066311200896 | Interpretation polygon finalized with 3 vertices, ID: a266c14d-1a27-4591-a894-631066f3b7b0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-126066311200896 | finalize_polygon() completed
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-126066311200896 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-126066311200896 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-126066311200896 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-126066311200896 | ProfileInterpretationTool.reset() completed
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-126066311200896 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-126066311200896 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-126066311200896 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-126066311200896 | ProfileInterpretationTool.reset() completed
2026-01-17 10:57:07 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-126066311200896 | Failed to create locator for layer layer1: mock error
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-126066311200896 | ProfileInterpretationTool.activate() called
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-126066311200896 | ProfileInterpretationTool activated successfully
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-126066311200896 | ProfileInterpretationTool.deactivate() called
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-126066311200896 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-126066311200896 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-126066311200896 | ProfileInterpretationTool.reset() completed
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-126066311200896 | ProfileInterpretationTool deactivated successfully
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:218 | Thread-126066311200896 | Inherited attributes from geology: Limestone
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:55 | Thread-126066311200896 | Loaded 0 interpretations from project
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:55 | Thread-126066311200896 | Loaded 1 interpretations from project
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:88 | Thread-126066311200896 | Saved 1 interpretations to project
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: buffer_dist = 100.5
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-126066311200896 | Persistent interpretations cleared by reset
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-126066311200896 | Setting saved to project: test_layer = id_123
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-126066311200896 | Setting saved to project: test_layer_name = RealName
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: test_layer = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-126066311200896 | Project setting hit: test_layer_name = RealName
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-126066311200896 | Restoring layer: test_layer -> RealName
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-126066311200896 | Point 1 added: 0.00, 0.00
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-126066311200896 | Point 2 added: 100.00, 100.00
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-126066311200896 | Point 1 added: 50.00, 50.00
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-126066311200896 | reset() called, finalized=False
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-126066311200896 | finalize_measurement called with 1 points
2026-01-17 10:57:07 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-126066311200896 | Cannot finalize measurement with less than 2 points
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-126066311200896 | finalize_measurement called with 2 points
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-126066311200896 | Setting finalized = True
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-126066311200896 | Measurement finalized: 2 points, 100.00m total distance
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-126066311200896 | Switching to pan tool to stop measurement
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-126066311200896 | Pan tool activated - measurement should be frozen
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-126066311200896 | Ignoring click - measurement is finalized
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-126066311200896 | finalize_measurement called with 2 points
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-126066311200896 | Setting finalized = True
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-126066311200896 | Measurement finalized: 2 points, 100.00m total distance
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-126066311200896 | Switching to pan tool to stop measurement
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-126066311200896 | Pan tool activated - measurement should be frozen
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-126066311200896 | reset() called, finalized=False
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-126066311200896 | reset() called, finalized=False
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-126066311200896 | reset() called, finalized=True
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-126066311200896 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-126066311200896 | reset() called, finalized=False
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-126066311200896 | finalize_measurement called with 2 points
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-126066311200896 | Setting finalized = True
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-126066311200896 | Measurement finalized: 2 points, 100.00m total distance
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-126066311200896 | Rubber band redrawn with final points only
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-126066311200896 | Switching to pan tool to stop measurement
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-126066311200896 | Pan tool activated - measurement should be frozen
2026-01-17 10:57:07 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-126066311200896 | Failed to create locator for layer layer1: mock error
2026-01-17 10:57:07 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-126066311200896 | Failed to create locator for layer l2: fail
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-126066311200896 | ProfileMeasureTool activated
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-126066311200896 | reset() called, finalized=False
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-126066311200896 | ProfileMeasureTool deactivated
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-126066311200896 | create_drillhole_trace_layer called with 1 holes
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-126066311200896 | Adding 1 drillhole trace features to layer
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-126066311200896 | create_drillhole_trace_layer called with 1 holes
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-126066311200896 | Adding 1 drillhole trace features to layer
2026-01-17 10:57:07 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-126066311200896 | Failed to create memory layer: Fail
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-126066311200896 | create_drillhole_trace_layer called with 0 holes
2026-01-17 10:57:07 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-126066311200896 | No drillhole data provided for trace layer
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-126066311200896 | create_drillhole_trace_layer called with 1 holes
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-126066311200896 | Skipping hole H1: insufficient trace points (1)
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-126066311200896 | Adding 0 drillhole trace features to layer
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-126066311200896 | create_drillhole_trace_layer called with 1 holes
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126066311200896 | render() called
2026-01-17 10:57:07 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-126066311200896 | No valid layers to render
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126066311200896 | render() called
2026-01-17 10:57:07 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-126066311200896 | Error exporting preview
Traceback (most recent call last):
  File "/app/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
               ^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126066311200896 | render() called
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126066311200896 | render() called
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126066311200896 | render() called
2026-01-17 10:57:07 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-126066311200896 | No valid layers to render
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126066311200896 | render() called
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126066311200896 | render() called
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-126066311200896 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-126066311200896 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126066311200896 | CacheService initialized (Default TTL: 3600s)
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-126066311200896 | ProfileController initialized
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:55 | Thread-126066311200896 | Loaded 0 interpretations from project
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: buffer_dist = 100.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dem_band = 1
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: scale = 50000.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: vert_exag = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dip_scale_factor = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dh_use_geom = True
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: interp_inherit_geol = True
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: interp_inherit_drill = True
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: show_topo = True
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: show_geol = True
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: show_struct = True
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: show_drillholes = True
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: show_interpretations = True
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: auto_lod = True
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: adaptive_sampling = True
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: max_points = 10000
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-126066311200896 | Settings loaded successfully from Project/Global config
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:88 | Thread-126066311200896 | Saved 1 interpretations to project
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126066311200896 | CacheService initialized (Default TTL: 3600s)
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-126066311200896 | ProfileController initialized
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:55 | Thread-126066311200896 | Loaded 0 interpretations from project
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: buffer_dist = 100.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dem_band = 1
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: scale = 50000.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: vert_exag = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dip_scale_factor = 1.0
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dh_use_geom = True
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: interp_inherit_geol = True
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: interp_inherit_drill = True
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: show_topo = True
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: show_geol = True
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: show_struct = True
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: show_drillholes = True
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: show_interpretations = True
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: auto_lod = True
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: adaptive_sampling = True
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: max_points = 10000
2026-01-17 10:57:07 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-126066311200896 | Settings loaded successfully from Project/Global config
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:88 | Thread-126066311200896 | Saved 1 interpretations to project
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:88 | Thread-126066311200896 | Saved 0 interpretations to project
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126066311200896 | CacheService initialized (Default TTL: 3600s)
2026-01-17 10:57:07 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-126066311200896 | ProfileController initialized
2026-01-17 10:57:08 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:55 | Thread-126066311200896 | Loaded 0 interpretations from project
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: buffer_dist = 100.0
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dem_band = 1
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: scale = 50000.0
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: vert_exag = 1.0
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dip_scale_factor = 1.0
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dh_use_geom = True
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: interp_inherit_geol = True
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: interp_inherit_drill = True
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: show_topo = True
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: show_geol = True
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: show_struct = True
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: show_drillholes = True
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: show_interpretations = True
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: auto_lod = True
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: adaptive_sampling = True
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: max_points = 10000
2026-01-17 10:57:08 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-126066311200896 | Settings loaded successfully from Project/Global config
2026-01-17 10:57:08 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:55 | Thread-126066311200896 | Loaded 1 interpretations from project
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-126066311200896 | Point 1 added: 0.00, 0.00
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-126066311200896 | Point 2 added: 10.00, 10.00
2026-01-17 10:57:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-126066311200896 | finalize_measurement called with 2 points
2026-01-17 10:57:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-126066311200896 | Setting finalized = True
2026-01-17 10:57:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-126066311200896 | Measurement finalized: 2 points, 14.14m total distance
2026-01-17 10:57:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-126066311200896 | Rubber band redrawn with final points only
2026-01-17 10:57:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-126066311200896 | Switching to pan tool to stop measurement
2026-01-17 10:57:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-126066311200896 | Pan tool activated - measurement should be frozen
2026-01-17 10:57:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-126066311200896 | reset() called, finalized=True
2026-01-17 10:57:08 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-126066311200896 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-126066311200896 | Point 1 added: 0.00, 0.00
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-126066311200896 | Point 2 added: 100.00, 100.00
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-126066311200896 | Point 3 added: 200.00, 150.00
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126066311200896 | CacheService initialized (Default TTL: 3600s)
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-126066311200896 | ProfileController initialized
2026-01-17 10:57:08 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:55 | Thread-126066311200896 | Loaded 1 interpretations from project
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: buffer_dist = 100.0
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dem_band = 1
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: scale = 50000.0
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: vert_exag = 1.0
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dip_scale_factor = 1.0
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: dh_use_geom = True
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: interp_inherit_geol = True
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: interp_inherit_drill = True
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: show_topo = True
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: show_geol = True
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: show_struct = True
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: show_drillholes = True
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: show_interpretations = True
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: auto_lod = True
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: adaptive_sampling = True
2026-01-17 10:57:08 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-126066311200896 | Global setting fallback: max_points = 10000
2026-01-17 10:57:08 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-126066311200896 | Settings loaded successfully from Project/Global config
2026-01-18 14:43:46 | DEBUG    | SecInterp | setup_logging:142 | Thread-138841622933632 | Logging system initialized. Root Level: 10
2026-01-18 14:43:46 | DEBUG    | SecInterp | setup_logging:143 | Thread-138841622933632 | File logging path: /app/sec_interp/logs/sec_interp_debug.log
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-138841622933632 | Configuration reset to defaults initiated
2026-01-18 14:43:46 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-138841622933632 | Config set: SecInterp/scale = 50000.0
2026-01-18 14:43:46 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-138841622933632 | Config set: SecInterp/vert_exag = 1.0
2026-01-18 14:43:46 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-138841622933632 | Config set: SecInterp/buffer_dist = 100.0
2026-01-18 14:43:46 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-138841622933632 | Config set: SecInterp/show_topo = True
2026-01-18 14:43:46 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-138841622933632 | Config set: SecInterp/show_geol = True
2026-01-18 14:43:46 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-138841622933632 | Config set: SecInterp/show_struct = True
2026-01-18 14:43:46 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-138841622933632 | Config set: SecInterp/show_drillholes = True
2026-01-18 14:43:46 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-138841622933632 | Config set: SecInterp/show_interpretations = True
2026-01-18 14:43:46 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-138841622933632 | Config set: SecInterp/interp_inherit_geol = True
2026-01-18 14:43:46 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-138841622933632 | Config set: SecInterp/interp_inherit_drill = True
2026-01-18 14:43:46 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-138841622933632 | Config set: SecInterp/dh_use_geom = True
2026-01-18 14:43:46 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-138841622933632 | Config set: SecInterp/auto_lod = False
2026-01-18 14:43:46 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-138841622933632 | Config set: SecInterp/adaptive_sampling = True
2026-01-18 14:43:46 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-138841622933632 | Config set: SecInterp/max_points = 10000
2026-01-18 14:43:46 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-138841622933632 | Config set: SecInterp/dem_band = 1
2026-01-18 14:43:46 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-138841622933632 | Config set: SecInterp/scale = 200.0
2026-01-18 14:43:46 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-138841622933632 | Config set: SecInterp/scale = 20000.0
2026-01-18 14:43:46 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138841622933632 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:43:46 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138841622933632 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:43:46 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138841622933632 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-138841622933632 | Projecting collars from Test Layer with buffer 50.0m
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:106 | Thread-138841622933632 | No collars found within buffer area.
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-138841622933632 | Projecting collars from Test Layer with buffer 50.0m
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:127 | Thread-138841622933632 | DrillholeService.project_collars END: Found 1 collars.
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-138841622933632 | ✓ Saving profile axes...
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-138841622933632 | ✓ Saving topographic profile...
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-138841622933632 | ✓ Saving profile axes...
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-138841622933632 | ✓ Saving interpretation data...
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-138841622933632 | 3D Export features are restricted for this user.
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-138841622933632 | ✓ Saving topographic profile...
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-138841622933632 | ✓ Saving profile axes...
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-138841622933632 | ✓ Saving interpretation data...
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-138841622933632 | ✓ Saving 3D interpretation data...
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-138841622933632 | ✓ Saving topographic profile...
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-138841622933632 | ✓ Saving profile axes...
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-138841622933632 | ✓ Saving geological profile...
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-138841622933632 | ✓ Saving structural profile...
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-138841622933632 | ✓ Saving drillhole data...
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-138841622933632 | ✓ Saving interpretation data...
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-138841622933632 | Access denied for restricted feature: 3D Export
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-138841622933632 | 3D Export features are restricted for this user.
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-138841622933632 | ✓ Saving topographic profile...
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-138841622933632 | ✓ Saving profile axes...
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-138841622933632 | No interpretations provided for export.
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-138841622933632 | ✓ Saving drillhole data...
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-138841622933632 | ✓ Saving geological profile...
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-138841622933632 | ✓ Saving interpretation data...
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-138841622933632 | ✓ Saving 3D interpretation data...
2026-01-18 14:43:46 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-138841622933632 | Invalid section line layer, skipping 3D export.
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-138841622933632 | ✓ Saving interpretation data...
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-138841622933632 | ✓ Saving structural profile...
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-138841622933632 | ✓ Saving topographic profile...
2026-01-18 14:43:46 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-138841622933632 | Generating master profile with interval=10.00
2026-01-18 14:43:46 | INFO     | SecInterp.performance | measure_operation:244 | Thread-138841622933632 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0088, 'memory_mb': 0.0, 'memory_peak_mb': 0.32, 'timestamp': '2026-01-18 14:43:46', 'args_count': 5, 'kwargs_keys': []}
2026-01-18 14:43:46 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-138841622933632 | Generating master profile with interval=50.00
2026-01-18 14:43:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-138841622933632 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-18 14:43:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-138841622933632 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-18 14:43:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-138841622933632 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-18 14:43:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-138841622933632 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-18 14:43:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-138841622933632 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-18 14:43:46 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-138841622933632 | Running geometry operation: test
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-138841622933632 | Generated 1 drillhole traces
2026-01-18 14:43:46 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-138841622933632 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-18 14:43:46 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:251 | Thread-138841622933632 | Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-138841622933632 | Generated 1 drillhole traces
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:171 | Thread-138841622933632 | Drillhole preview skipped: No Collar ID field selected.
2026-01-18 14:43:46 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-138841622933632 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 14:43:46 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-138841622933632 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 14:43:46 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-138841622933632 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 14:43:46 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-138841622933632 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 14:43:46 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-138841622933632 | Buffer creation failed
Traceback (most recent call last):
  File "/app/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-138841622933632 | Analyzing structures in Structure Layer with buffer 10m
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-138841622933632 | Processed 1 structural measurements from Structure Layer
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-138841622933632 | Successfully exported to /tmp/test_dynamic.shp
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-138841622933632 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-138841622933632 | Generated QML style: /tmp/test.qml
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-138841622933632 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-138841622933632 | Generated QML style: dummy.qml
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-138841622933632 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-18 14:43:46 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-138841622933632 | Generated QML style: dummy.qml
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-138841622933632 | Loaded 0 interpretations from project
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:224 | Thread-138841622933632 | Inherited attributes from geology: GeologyUnit
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-138841622933632 | Loaded 0 interpretations from project
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: section_layer = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: section_layer_name = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138841622933632 | Failed to restore layer for section_layer
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: buffer_dist = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dem_layer = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dem_layer_name = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138841622933632 | Failed to restore layer for dem_layer
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dem_band = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: scale = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: vert_exag = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: geol_layer = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: geol_layer_name = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138841622933632 | Failed to restore layer for geol_layer
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: geol_field = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: struct_layer = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: struct_layer_name = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138841622933632 | Failed to restore layer for struct_layer
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: struct_dip_field = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: struct_strike_field = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dh_collar_layer = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138841622933632 | Failed to restore layer for dh_collar_layer
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dh_collar_id = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dh_use_geom = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dh_collar_x = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dh_collar_y = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dh_collar_z = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dh_collar_depth = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dh_survey_layer = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138841622933632 | Failed to restore layer for dh_survey_layer
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dh_survey_id = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dh_survey_depth = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dh_survey_azim = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dh_survey_incl = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dh_interval_layer = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-138841622933632 | Failed to restore layer for dh_interval_layer
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dh_interval_id = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dh_interval_from = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dh_interval_to = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dh_interval_lith = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: last_output_dir = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: interp_custom_fields = 1.0
2026-01-18 14:43:47 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-138841622933632 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: show_topo = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: show_geol = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: show_struct = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: show_drillholes = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: show_interpretations = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: auto_lod = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: adaptive_sampling = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: max_points = 1.0
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-138841622933632 | Settings loaded successfully from Project/Global config
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:341 | Thread-138841622933632 | Cache cleared by user
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-138841622933632 | GeologyGenerationTask started (Background Thread)
2026-01-18 14:43:47 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-138841622933632 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/app/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-138841622933632 | GeologyGenerationTask started (Background Thread)
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-138841622933632 | GeologyGenerationTask finished with 1 segments
2026-01-18 14:43:47 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-138841622933632 | Test Title: Test Message
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-138841622933632 | Test Title: Test Message
2026-01-18 14:43:47 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-138841622933632 | Test Title: Test Message
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-138841622933632 | CRITICAL_OP: finalize_polygon | points=2
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-138841622933632 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-18 14:43:47 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-138841622933632 | finalize_polygon() aborted - less than 3 points
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-138841622933632 | CRITICAL_OP: finalize_polygon | points=3
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-138841622933632 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-138841622933632 | finalize_polygon() - emitting polygonFinished signal for 771d5073-fb1f-416b-aa63-80a491593ca1
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-138841622933632 | Interpretation polygon finalized with 3 vertices, ID: 771d5073-fb1f-416b-aa63-80a491593ca1
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-138841622933632 | finalize_polygon() completed
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-138841622933632 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-138841622933632 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-138841622933632 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-138841622933632 | ProfileInterpretationTool.reset() completed
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-138841622933632 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-138841622933632 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-138841622933632 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-138841622933632 | ProfileInterpretationTool.reset() completed
2026-01-18 14:43:47 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-138841622933632 | Failed to create locator for layer layer1: mock error
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-138841622933632 | ProfileInterpretationTool.activate() called
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-138841622933632 | ProfileInterpretationTool activated successfully
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-138841622933632 | ProfileInterpretationTool.deactivate() called
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-138841622933632 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-138841622933632 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-138841622933632 | ProfileInterpretationTool.reset() completed
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-138841622933632 | ProfileInterpretationTool deactivated successfully
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:224 | Thread-138841622933632 | Inherited attributes from geology: Limestone
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-138841622933632 | Loaded 0 interpretations from project
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-138841622933632 | Loaded 1 interpretations from project
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-138841622933632 | Saved 1 interpretations to project
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: buffer_dist = 100.5
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-138841622933632 | Persistent interpretations cleared by reset
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-138841622933632 | Setting saved to project: test_layer = id_123
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-138841622933632 | Setting saved to project: test_layer_name = RealName
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: test_layer = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-138841622933632 | Project setting hit: test_layer_name = RealName
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-138841622933632 | Restoring layer: test_layer -> RealName
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-138841622933632 | Point 1 added: 0.00, 0.00
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-138841622933632 | Point 2 added: 100.00, 100.00
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-138841622933632 | Point 1 added: 50.00, 50.00
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138841622933632 | reset() called, finalized=False
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-138841622933632 | finalize_measurement called with 1 points
2026-01-18 14:43:47 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-138841622933632 | Cannot finalize measurement with less than 2 points
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-138841622933632 | finalize_measurement called with 2 points
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-138841622933632 | Setting finalized = True
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-138841622933632 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-138841622933632 | Switching to pan tool to stop measurement
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-138841622933632 | Pan tool activated - measurement should be frozen
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-138841622933632 | Ignoring click - measurement is finalized
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-138841622933632 | finalize_measurement called with 2 points
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-138841622933632 | Setting finalized = True
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-138841622933632 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-138841622933632 | Switching to pan tool to stop measurement
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-138841622933632 | Pan tool activated - measurement should be frozen
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138841622933632 | reset() called, finalized=False
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138841622933632 | reset() called, finalized=False
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138841622933632 | reset() called, finalized=True
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-138841622933632 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138841622933632 | reset() called, finalized=False
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-138841622933632 | finalize_measurement called with 2 points
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-138841622933632 | Setting finalized = True
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-138841622933632 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-138841622933632 | Rubber band redrawn with final points only
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-138841622933632 | Switching to pan tool to stop measurement
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-138841622933632 | Pan tool activated - measurement should be frozen
2026-01-18 14:43:47 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-138841622933632 | Failed to create locator for layer layer1: mock error
2026-01-18 14:43:47 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-138841622933632 | Failed to create locator for layer l2: fail
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-138841622933632 | ProfileMeasureTool activated
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138841622933632 | reset() called, finalized=False
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-138841622933632 | ProfileMeasureTool deactivated
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138841622933632 | create_drillhole_trace_layer called with 1 holes
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-138841622933632 | Adding 1 drillhole trace features to layer
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138841622933632 | create_drillhole_trace_layer called with 1 holes
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-138841622933632 | Adding 1 drillhole trace features to layer
2026-01-18 14:43:47 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-138841622933632 | Failed to create memory layer: Fail
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138841622933632 | create_drillhole_trace_layer called with 0 holes
2026-01-18 14:43:47 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-138841622933632 | No drillhole data provided for trace layer
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138841622933632 | create_drillhole_trace_layer called with 1 holes
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-138841622933632 | Skipping hole H1: insufficient trace points (1)
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-138841622933632 | Adding 0 drillhole trace features to layer
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-138841622933632 | create_drillhole_trace_layer called with 1 holes
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138841622933632 | render() called
2026-01-18 14:43:47 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-138841622933632 | No valid layers to render
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138841622933632 | render() called
2026-01-18 14:43:47 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-138841622933632 | Error exporting preview
Traceback (most recent call last):
  File "/app/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
               ^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138841622933632 | render() called
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138841622933632 | render() called
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138841622933632 | render() called
2026-01-18 14:43:47 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-138841622933632 | No valid layers to render
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138841622933632 | render() called
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-138841622933632 | render() called
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-138841622933632 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-138841622933632 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138841622933632 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-138841622933632 | ProfileController initialized
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-138841622933632 | Loaded 0 interpretations from project
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: buffer_dist = 100.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dem_band = 1
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: scale = 50000.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: vert_exag = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dh_use_geom = True
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: interp_inherit_geol = True
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: interp_inherit_drill = True
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: show_topo = True
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: show_geol = True
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: show_struct = True
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: show_drillholes = True
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: show_interpretations = True
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: auto_lod = True
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: adaptive_sampling = True
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: max_points = 10000
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-138841622933632 | Settings loaded successfully from Project/Global config
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-138841622933632 | Saved 1 interpretations to project
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138841622933632 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-138841622933632 | ProfileController initialized
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-138841622933632 | Loaded 0 interpretations from project
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: buffer_dist = 100.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dem_band = 1
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: scale = 50000.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: vert_exag = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dh_use_geom = True
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: interp_inherit_geol = True
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: interp_inherit_drill = True
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: show_topo = True
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: show_geol = True
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: show_struct = True
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: show_drillholes = True
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: show_interpretations = True
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: auto_lod = True
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: adaptive_sampling = True
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: max_points = 10000
2026-01-18 14:43:47 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-138841622933632 | Settings loaded successfully from Project/Global config
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-138841622933632 | Saved 1 interpretations to project
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-138841622933632 | Saved 0 interpretations to project
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138841622933632 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:43:47 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-138841622933632 | ProfileController initialized
2026-01-18 14:43:48 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-138841622933632 | Loaded 0 interpretations from project
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: buffer_dist = 100.0
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dem_band = 1
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: scale = 50000.0
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: vert_exag = 1.0
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dh_use_geom = True
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: interp_inherit_geol = True
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: interp_inherit_drill = True
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: show_topo = True
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: show_geol = True
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: show_struct = True
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: show_drillholes = True
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: show_interpretations = True
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: auto_lod = True
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: adaptive_sampling = True
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: max_points = 10000
2026-01-18 14:43:48 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-138841622933632 | Settings loaded successfully from Project/Global config
2026-01-18 14:43:48 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-138841622933632 | Loaded 1 interpretations from project
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-138841622933632 | Point 1 added: 0.00, 0.00
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-138841622933632 | Point 2 added: 10.00, 10.00
2026-01-18 14:43:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-138841622933632 | finalize_measurement called with 2 points
2026-01-18 14:43:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-138841622933632 | Setting finalized = True
2026-01-18 14:43:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-138841622933632 | Measurement finalized: 2 points, 14.14m total distance
2026-01-18 14:43:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-138841622933632 | Rubber band redrawn with final points only
2026-01-18 14:43:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-138841622933632 | Switching to pan tool to stop measurement
2026-01-18 14:43:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-138841622933632 | Pan tool activated - measurement should be frozen
2026-01-18 14:43:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-138841622933632 | reset() called, finalized=True
2026-01-18 14:43:48 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-138841622933632 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-138841622933632 | Point 1 added: 0.00, 0.00
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-138841622933632 | Point 2 added: 100.00, 100.00
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-138841622933632 | Point 3 added: 200.00, 150.00
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-138841622933632 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-138841622933632 | ProfileController initialized
2026-01-18 14:43:48 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-138841622933632 | Loaded 1 interpretations from project
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: buffer_dist = 100.0
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dem_band = 1
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: scale = 50000.0
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: vert_exag = 1.0
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: dh_use_geom = True
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: interp_inherit_geol = True
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: interp_inherit_drill = True
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: show_topo = True
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: show_geol = True
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: show_struct = True
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: show_drillholes = True
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: show_interpretations = True
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: auto_lod = True
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: adaptive_sampling = True
2026-01-18 14:43:48 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-138841622933632 | Global setting fallback: max_points = 10000
2026-01-18 14:43:48 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-138841622933632 | Settings loaded successfully from Project/Global config
2026-01-18 09:48:06 | DEBUG    | SecInterp | setup_logging:142 | Thread-126232540314560 | Logging system initialized. Root Level: 10
2026-01-18 09:48:06 | DEBUG    | SecInterp | setup_logging:143 | Thread-126232540314560 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-18 09:48:06 | WARNING  | SecInterp.sec_interp.gui.main_dialog_messages | handle_error:57 | Thread-126232540314560 | App Error: Validation failed - Details: Check inputs
2026-01-18 09:48:06 | ERROR    | SecInterp.sec_interp.gui.main_dialog_messages | handle_error:62 | Thread-126232540314560 | System Error: An unexpected error occurred: Something went wrong
Stack trace details
2026-01-18 14:49:03 | DEBUG    | SecInterp | setup_logging:142 | Thread-133253187305600 | Logging system initialized. Root Level: 10
2026-01-18 14:49:03 | DEBUG    | SecInterp | setup_logging:143 | Thread-133253187305600 | File logging path: /app/sec_interp/logs/sec_interp_debug.log
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-133253187305600 | Configuration reset to defaults initiated
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-133253187305600 | Config set: SecInterp/scale = 50000.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-133253187305600 | Config set: SecInterp/vert_exag = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-133253187305600 | Config set: SecInterp/buffer_dist = 100.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-133253187305600 | Config set: SecInterp/show_topo = True
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-133253187305600 | Config set: SecInterp/show_geol = True
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-133253187305600 | Config set: SecInterp/show_struct = True
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-133253187305600 | Config set: SecInterp/show_drillholes = True
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-133253187305600 | Config set: SecInterp/show_interpretations = True
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-133253187305600 | Config set: SecInterp/interp_inherit_geol = True
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-133253187305600 | Config set: SecInterp/interp_inherit_drill = True
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-133253187305600 | Config set: SecInterp/dh_use_geom = True
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-133253187305600 | Config set: SecInterp/auto_lod = False
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-133253187305600 | Config set: SecInterp/adaptive_sampling = True
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-133253187305600 | Config set: SecInterp/max_points = 10000
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-133253187305600 | Config set: SecInterp/dem_band = 1
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-133253187305600 | Config set: SecInterp/scale = 200.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-133253187305600 | Config set: SecInterp/scale = 20000.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133253187305600 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133253187305600 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133253187305600 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-133253187305600 | Projecting collars from Test Layer with buffer 50.0m
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:106 | Thread-133253187305600 | No collars found within buffer area.
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-133253187305600 | Projecting collars from Test Layer with buffer 50.0m
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:127 | Thread-133253187305600 | DrillholeService.project_collars END: Found 1 collars.
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-133253187305600 | ✓ Saving profile axes...
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-133253187305600 | ✓ Saving topographic profile...
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-133253187305600 | ✓ Saving profile axes...
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-133253187305600 | ✓ Saving interpretation data...
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-133253187305600 | 3D Export features are restricted for this user.
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-133253187305600 | ✓ Saving topographic profile...
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-133253187305600 | ✓ Saving profile axes...
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-133253187305600 | ✓ Saving interpretation data...
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-133253187305600 | ✓ Saving 3D interpretation data...
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-133253187305600 | ✓ Saving topographic profile...
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-133253187305600 | ✓ Saving profile axes...
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-133253187305600 | ✓ Saving geological profile...
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-133253187305600 | ✓ Saving structural profile...
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-133253187305600 | ✓ Saving drillhole data...
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-133253187305600 | ✓ Saving interpretation data...
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-133253187305600 | Access denied for restricted feature: 3D Export
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-133253187305600 | 3D Export features are restricted for this user.
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-133253187305600 | ✓ Saving topographic profile...
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-133253187305600 | ✓ Saving profile axes...
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-133253187305600 | No interpretations provided for export.
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-133253187305600 | ✓ Saving drillhole data...
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-133253187305600 | ✓ Saving geological profile...
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-133253187305600 | ✓ Saving interpretation data...
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-133253187305600 | ✓ Saving 3D interpretation data...
2026-01-18 14:49:04 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-133253187305600 | Invalid section line layer, skipping 3D export.
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-133253187305600 | ✓ Saving interpretation data...
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-133253187305600 | ✓ Saving structural profile...
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-133253187305600 | ✓ Saving topographic profile...
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-133253187305600 | Generating master profile with interval=10.00
2026-01-18 14:49:04 | INFO     | SecInterp.performance | measure_operation:244 | Thread-133253187305600 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0075, 'memory_mb': 0.0, 'memory_peak_mb': 0.32, 'timestamp': '2026-01-18 14:49:04', 'args_count': 5, 'kwargs_keys': []}
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-133253187305600 | Generating master profile with interval=50.00
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-133253187305600 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-133253187305600 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-133253187305600 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-133253187305600 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-133253187305600 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-133253187305600 | Running geometry operation: test
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-133253187305600 | Generated 1 drillhole traces
2026-01-18 14:49:04 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-133253187305600 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-18 14:49:04 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:251 | Thread-133253187305600 | Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-133253187305600 | Generated 1 drillhole traces
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:171 | Thread-133253187305600 | Drillhole preview skipped: No Collar ID field selected.
2026-01-18 14:49:04 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-133253187305600 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 14:49:04 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-133253187305600 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 14:49:04 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-133253187305600 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 14:49:04 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-133253187305600 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 14:49:04 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-133253187305600 | Buffer creation failed
Traceback (most recent call last):
  File "/app/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-133253187305600 | Analyzing structures in Structure Layer with buffer 10m
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-133253187305600 | Processed 1 structural measurements from Structure Layer
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-133253187305600 | Successfully exported to /tmp/test_dynamic.shp
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-133253187305600 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-133253187305600 | Generated QML style: /tmp/test.qml
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-133253187305600 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-133253187305600 | Generated QML style: dummy.qml
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-133253187305600 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-133253187305600 | Generated QML style: dummy.qml
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-133253187305600 | Loaded 0 interpretations from project
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:224 | Thread-133253187305600 | Inherited attributes from geology: GeologyUnit
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-133253187305600 | Loaded 0 interpretations from project
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: section_layer = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: section_layer_name = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-133253187305600 | Failed to restore layer for section_layer
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: buffer_dist = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dem_layer = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dem_layer_name = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-133253187305600 | Failed to restore layer for dem_layer
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dem_band = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: scale = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: vert_exag = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: geol_layer = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: geol_layer_name = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-133253187305600 | Failed to restore layer for geol_layer
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: geol_field = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: struct_layer = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: struct_layer_name = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-133253187305600 | Failed to restore layer for struct_layer
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: struct_dip_field = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: struct_strike_field = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dh_collar_layer = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-133253187305600 | Failed to restore layer for dh_collar_layer
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dh_collar_id = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dh_use_geom = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dh_collar_x = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dh_collar_y = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dh_collar_z = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dh_collar_depth = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dh_survey_layer = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-133253187305600 | Failed to restore layer for dh_survey_layer
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dh_survey_id = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dh_survey_depth = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dh_survey_azim = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dh_survey_incl = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dh_interval_layer = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:438 | Thread-133253187305600 | Failed to restore layer for dh_interval_layer
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dh_interval_id = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dh_interval_from = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dh_interval_to = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dh_interval_lith = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: last_output_dir = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: interp_custom_fields = 1.0
2026-01-18 14:49:04 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-133253187305600 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: show_topo = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: show_geol = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: show_struct = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: show_drillholes = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: show_interpretations = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: auto_lod = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: adaptive_sampling = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: max_points = 1.0
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-133253187305600 | Settings loaded successfully from Project/Global config
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.gui.main_dialog | clear_cache_handler:330 | Thread-133253187305600 | Cache cleared by user
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-133253187305600 | GeologyGenerationTask started (Background Thread)
2026-01-18 14:49:04 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-133253187305600 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/app/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-133253187305600 | GeologyGenerationTask started (Background Thread)
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-133253187305600 | GeologyGenerationTask finished with 1 segments
2026-01-18 14:49:04 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-133253187305600 | Test Title: Test Message
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-133253187305600 | Test Title: Test Message
2026-01-18 14:49:04 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-133253187305600 | Test Title: Test Message
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-133253187305600 | CRITICAL_OP: finalize_polygon | points=2
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-133253187305600 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-18 14:49:04 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-133253187305600 | finalize_polygon() aborted - less than 3 points
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-133253187305600 | CRITICAL_OP: finalize_polygon | points=3
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-133253187305600 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-133253187305600 | finalize_polygon() - emitting polygonFinished signal for 2413d1f3-7c20-4cd7-9370-d39611bb78f2
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-133253187305600 | Interpretation polygon finalized with 3 vertices, ID: 2413d1f3-7c20-4cd7-9370-d39611bb78f2
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-133253187305600 | finalize_polygon() completed
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-133253187305600 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-133253187305600 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-133253187305600 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-133253187305600 | ProfileInterpretationTool.reset() completed
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-133253187305600 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-133253187305600 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-133253187305600 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-133253187305600 | ProfileInterpretationTool.reset() completed
2026-01-18 14:49:04 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-133253187305600 | Failed to create locator for layer layer1: mock error
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-133253187305600 | ProfileInterpretationTool.activate() called
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-133253187305600 | ProfileInterpretationTool activated successfully
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-133253187305600 | ProfileInterpretationTool.deactivate() called
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-133253187305600 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-133253187305600 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-133253187305600 | ProfileInterpretationTool.reset() completed
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-133253187305600 | ProfileInterpretationTool deactivated successfully
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:224 | Thread-133253187305600 | Inherited attributes from geology: Limestone
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-133253187305600 | Loaded 0 interpretations from project
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-133253187305600 | Loaded 1 interpretations from project
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-133253187305600 | Saved 1 interpretations to project
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: buffer_dist = 100.5
2026-01-18 14:49:04 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-133253187305600 | Persistent interpretations cleared by reset
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-133253187305600 | Setting saved to project: test_layer = id_123
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:395 | Thread-133253187305600 | Setting saved to project: test_layer_name = RealName
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: test_layer = 1.0
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:375 | Thread-133253187305600 | Project setting hit: test_layer_name = RealName
2026-01-18 14:49:04 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:432 | Thread-133253187305600 | Restoring layer: test_layer -> RealName
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-133253187305600 | Point 1 added: 0.00, 0.00
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-133253187305600 | Point 2 added: 100.00, 100.00
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-133253187305600 | Point 1 added: 50.00, 50.00
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-133253187305600 | reset() called, finalized=False
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133253187305600 | finalize_measurement called with 1 points
2026-01-18 14:49:05 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-133253187305600 | Cannot finalize measurement with less than 2 points
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133253187305600 | finalize_measurement called with 2 points
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-133253187305600 | Setting finalized = True
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-133253187305600 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-133253187305600 | Switching to pan tool to stop measurement
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-133253187305600 | Pan tool activated - measurement should be frozen
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-133253187305600 | Ignoring click - measurement is finalized
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133253187305600 | finalize_measurement called with 2 points
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-133253187305600 | Setting finalized = True
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-133253187305600 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-133253187305600 | Switching to pan tool to stop measurement
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-133253187305600 | Pan tool activated - measurement should be frozen
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-133253187305600 | reset() called, finalized=False
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-133253187305600 | reset() called, finalized=False
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-133253187305600 | reset() called, finalized=True
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-133253187305600 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-133253187305600 | reset() called, finalized=False
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133253187305600 | finalize_measurement called with 2 points
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-133253187305600 | Setting finalized = True
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-133253187305600 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-133253187305600 | Rubber band redrawn with final points only
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-133253187305600 | Switching to pan tool to stop measurement
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-133253187305600 | Pan tool activated - measurement should be frozen
2026-01-18 14:49:05 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-133253187305600 | Failed to create locator for layer layer1: mock error
2026-01-18 14:49:05 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-133253187305600 | Failed to create locator for layer l2: fail
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-133253187305600 | ProfileMeasureTool activated
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-133253187305600 | reset() called, finalized=False
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-133253187305600 | ProfileMeasureTool deactivated
2026-01-18 14:49:05 | WARNING  | SecInterp.sec_interp.gui.main_dialog_messages | handle_error:57 | Thread-133253187305600 | App Error: Validation failed - Details: Check inputs
2026-01-18 14:49:05 | ERROR    | SecInterp.sec_interp.gui.main_dialog_messages | handle_error:62 | Thread-133253187305600 | System Error: An unexpected error occurred: Something went wrong
Stack trace details
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133253187305600 | create_drillhole_trace_layer called with 1 holes
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-133253187305600 | Adding 1 drillhole trace features to layer
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133253187305600 | create_drillhole_trace_layer called with 1 holes
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-133253187305600 | Adding 1 drillhole trace features to layer
2026-01-18 14:49:05 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-133253187305600 | Failed to create memory layer: Fail
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133253187305600 | create_drillhole_trace_layer called with 0 holes
2026-01-18 14:49:05 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-133253187305600 | No drillhole data provided for trace layer
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133253187305600 | create_drillhole_trace_layer called with 1 holes
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-133253187305600 | Skipping hole H1: insufficient trace points (1)
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-133253187305600 | Adding 0 drillhole trace features to layer
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-133253187305600 | create_drillhole_trace_layer called with 1 holes
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133253187305600 | render() called
2026-01-18 14:49:05 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-133253187305600 | No valid layers to render
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133253187305600 | render() called
2026-01-18 14:49:05 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-133253187305600 | Error exporting preview
Traceback (most recent call last):
  File "/app/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
               ^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133253187305600 | render() called
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133253187305600 | render() called
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133253187305600 | render() called
2026-01-18 14:49:05 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-133253187305600 | No valid layers to render
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133253187305600 | render() called
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-133253187305600 | render() called
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-133253187305600 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-133253187305600 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133253187305600 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-133253187305600 | ProfileController initialized
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-133253187305600 | Loaded 0 interpretations from project
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: buffer_dist = 100.0
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dem_band = 1
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: scale = 50000.0
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: vert_exag = 1.0
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dh_use_geom = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: interp_inherit_geol = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: interp_inherit_drill = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: show_topo = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: show_geol = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: show_struct = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: show_drillholes = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: show_interpretations = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: auto_lod = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: adaptive_sampling = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: max_points = 10000
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-133253187305600 | Settings loaded successfully from Project/Global config
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-133253187305600 | Saved 1 interpretations to project
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133253187305600 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-133253187305600 | ProfileController initialized
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-133253187305600 | Loaded 0 interpretations from project
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: buffer_dist = 100.0
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dem_band = 1
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: scale = 50000.0
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: vert_exag = 1.0
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dh_use_geom = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: interp_inherit_geol = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: interp_inherit_drill = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: show_topo = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: show_geol = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: show_struct = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: show_drillholes = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: show_interpretations = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: auto_lod = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: adaptive_sampling = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: max_points = 10000
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-133253187305600 | Settings loaded successfully from Project/Global config
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-133253187305600 | Saved 1 interpretations to project
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-133253187305600 | Saved 0 interpretations to project
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133253187305600 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-133253187305600 | ProfileController initialized
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-133253187305600 | Loaded 0 interpretations from project
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: buffer_dist = 100.0
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dem_band = 1
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: scale = 50000.0
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: vert_exag = 1.0
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dh_use_geom = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: interp_inherit_geol = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: interp_inherit_drill = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: show_topo = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: show_geol = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: show_struct = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: show_drillholes = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: show_interpretations = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: auto_lod = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: adaptive_sampling = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: max_points = 10000
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-133253187305600 | Settings loaded successfully from Project/Global config
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-133253187305600 | Loaded 1 interpretations from project
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-133253187305600 | Point 1 added: 0.00, 0.00
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-133253187305600 | Point 2 added: 10.00, 10.00
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-133253187305600 | finalize_measurement called with 2 points
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-133253187305600 | Setting finalized = True
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-133253187305600 | Measurement finalized: 2 points, 14.14m total distance
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-133253187305600 | Rubber band redrawn with final points only
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-133253187305600 | Switching to pan tool to stop measurement
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-133253187305600 | Pan tool activated - measurement should be frozen
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-133253187305600 | reset() called, finalized=True
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-133253187305600 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-133253187305600 | Point 1 added: 0.00, 0.00
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-133253187305600 | Point 2 added: 100.00, 100.00
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-133253187305600 | Point 3 added: 200.00, 150.00
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-133253187305600 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-133253187305600 | ProfileController initialized
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-133253187305600 | Loaded 1 interpretations from project
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: buffer_dist = 100.0
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dem_band = 1
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: scale = 50000.0
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: vert_exag = 1.0
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: dh_use_geom = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: interp_inherit_geol = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: interp_inherit_drill = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: show_topo = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: show_geol = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: show_struct = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: show_drillholes = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: show_interpretations = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: auto_lod = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: adaptive_sampling = True
2026-01-18 14:49:05 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:383 | Thread-133253187305600 | Global setting fallback: max_points = 10000
2026-01-18 14:49:05 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-133253187305600 | Settings loaded successfully from Project/Global config
2026-01-18 14:51:57 | DEBUG    | SecInterp | setup_logging:142 | Thread-126988116623488 | Logging system initialized. Root Level: 10
2026-01-18 14:51:57 | DEBUG    | SecInterp | setup_logging:143 | Thread-126988116623488 | File logging path: /app/sec_interp/logs/sec_interp_debug.log
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-126988116623488 | Configuration reset to defaults initiated
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126988116623488 | Config set: SecInterp/scale = 50000.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126988116623488 | Config set: SecInterp/vert_exag = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126988116623488 | Config set: SecInterp/buffer_dist = 100.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126988116623488 | Config set: SecInterp/show_topo = True
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126988116623488 | Config set: SecInterp/show_geol = True
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126988116623488 | Config set: SecInterp/show_struct = True
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126988116623488 | Config set: SecInterp/show_drillholes = True
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126988116623488 | Config set: SecInterp/show_interpretations = True
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126988116623488 | Config set: SecInterp/interp_inherit_geol = True
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126988116623488 | Config set: SecInterp/interp_inherit_drill = True
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126988116623488 | Config set: SecInterp/dh_use_geom = True
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126988116623488 | Config set: SecInterp/auto_lod = False
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126988116623488 | Config set: SecInterp/adaptive_sampling = True
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126988116623488 | Config set: SecInterp/max_points = 10000
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126988116623488 | Config set: SecInterp/dem_band = 1
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126988116623488 | Config set: SecInterp/scale = 200.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-126988116623488 | Config set: SecInterp/scale = 20000.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126988116623488 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126988116623488 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126988116623488 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-126988116623488 | Projecting collars from Test Layer with buffer 50.0m
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:106 | Thread-126988116623488 | No collars found within buffer area.
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-126988116623488 | Projecting collars from Test Layer with buffer 50.0m
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:127 | Thread-126988116623488 | DrillholeService.project_collars END: Found 1 collars.
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-126988116623488 | ✓ Saving profile axes...
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-126988116623488 | ✓ Saving topographic profile...
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-126988116623488 | ✓ Saving profile axes...
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-126988116623488 | ✓ Saving interpretation data...
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-126988116623488 | 3D Export features are restricted for this user.
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-126988116623488 | ✓ Saving topographic profile...
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-126988116623488 | ✓ Saving profile axes...
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-126988116623488 | ✓ Saving interpretation data...
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-126988116623488 | ✓ Saving 3D interpretation data...
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-126988116623488 | ✓ Saving topographic profile...
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-126988116623488 | ✓ Saving profile axes...
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-126988116623488 | ✓ Saving geological profile...
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-126988116623488 | ✓ Saving structural profile...
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-126988116623488 | ✓ Saving drillhole data...
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-126988116623488 | ✓ Saving interpretation data...
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-126988116623488 | Access denied for restricted feature: 3D Export
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-126988116623488 | 3D Export features are restricted for this user.
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-126988116623488 | ✓ Saving topographic profile...
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-126988116623488 | ✓ Saving profile axes...
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-126988116623488 | No interpretations provided for export.
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-126988116623488 | ✓ Saving drillhole data...
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-126988116623488 | ✓ Saving geological profile...
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-126988116623488 | ✓ Saving interpretation data...
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-126988116623488 | ✓ Saving 3D interpretation data...
2026-01-18 14:51:58 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-126988116623488 | Invalid section line layer, skipping 3D export.
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-126988116623488 | ✓ Saving interpretation data...
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-126988116623488 | ✓ Saving structural profile...
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-126988116623488 | ✓ Saving topographic profile...
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-126988116623488 | Generating master profile with interval=10.00
2026-01-18 14:51:58 | INFO     | SecInterp.performance | measure_operation:244 | Thread-126988116623488 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0065, 'memory_mb': 0.0, 'memory_peak_mb': 0.32, 'timestamp': '2026-01-18 14:51:58', 'args_count': 5, 'kwargs_keys': []}
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-126988116623488 | Generating master profile with interval=50.00
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-126988116623488 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-126988116623488 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-126988116623488 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-126988116623488 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-126988116623488 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-126988116623488 | Running geometry operation: test
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-126988116623488 | Generated 1 drillhole traces
2026-01-18 14:51:58 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-126988116623488 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-18 14:51:58 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:251 | Thread-126988116623488 | Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-126988116623488 | Generated 1 drillhole traces
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:171 | Thread-126988116623488 | Drillhole preview skipped: No Collar ID field selected.
2026-01-18 14:51:58 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-126988116623488 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 14:51:58 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-126988116623488 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 14:51:58 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-126988116623488 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 14:51:58 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-126988116623488 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 14:51:58 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-126988116623488 | Buffer creation failed
Traceback (most recent call last):
  File "/app/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-126988116623488 | Analyzing structures in Structure Layer with buffer 10m
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-126988116623488 | Processed 1 structural measurements from Structure Layer
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-126988116623488 | Successfully exported to /tmp/test_dynamic.shp
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-126988116623488 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-126988116623488 | Generated QML style: /tmp/test.qml
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-126988116623488 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-126988116623488 | Generated QML style: dummy.qml
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-126988116623488 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-126988116623488 | Generated QML style: dummy.qml
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-126988116623488 | Loaded 0 interpretations from project
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:224 | Thread-126988116623488 | Inherited attributes from geology: GeologyUnit
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-126988116623488 | Loaded 0 interpretations from project
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: section_layer = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: section_layer_name = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-126988116623488 | Failed to restore layer for section_layer
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: buffer_dist = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dem_layer = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dem_layer_name = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-126988116623488 | Failed to restore layer for dem_layer
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dem_band = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: scale = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: vert_exag = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: geol_layer = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: geol_layer_name = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-126988116623488 | Failed to restore layer for geol_layer
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: geol_field = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: struct_layer = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: struct_layer_name = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-126988116623488 | Failed to restore layer for struct_layer
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: struct_dip_field = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: struct_strike_field = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dh_collar_layer = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-126988116623488 | Failed to restore layer for dh_collar_layer
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dh_collar_id = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dh_use_geom = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dh_collar_x = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dh_collar_y = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dh_collar_z = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dh_collar_depth = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dh_survey_layer = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-126988116623488 | Failed to restore layer for dh_survey_layer
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dh_survey_id = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dh_survey_depth = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dh_survey_azim = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dh_survey_incl = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dh_interval_layer = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-126988116623488 | Failed to restore layer for dh_interval_layer
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dh_interval_id = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dh_interval_from = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dh_interval_to = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dh_interval_lith = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: last_output_dir = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: interp_custom_fields = 1.0
2026-01-18 14:51:58 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-126988116623488 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: show_topo = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: show_geol = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: show_struct = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: show_drillholes = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: show_interpretations = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: auto_lod = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: adaptive_sampling = 1.0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: max_points = 1.0
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-126988116623488 | Settings loaded successfully from Project/Global config
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-126988116623488 | GeologyGenerationTask started (Background Thread)
2026-01-18 14:51:58 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-126988116623488 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/app/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-126988116623488 | GeologyGenerationTask started (Background Thread)
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-126988116623488 | GeologyGenerationTask finished with 1 segments
2026-01-18 14:51:58 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-126988116623488 | Test Title: Test Message
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-126988116623488 | Test Title: Test Message
2026-01-18 14:51:58 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-126988116623488 | Test Title: Test Message
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-126988116623488 | CRITICAL_OP: finalize_polygon | points=2
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-126988116623488 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-18 14:51:58 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-126988116623488 | finalize_polygon() aborted - less than 3 points
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-126988116623488 | CRITICAL_OP: finalize_polygon | points=3
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-126988116623488 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-126988116623488 | finalize_polygon() - emitting polygonFinished signal for b76342b7-3ff7-482f-a754-4eb959894986
2026-01-18 14:51:58 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-126988116623488 | Interpretation polygon finalized with 3 vertices, ID: b76342b7-3ff7-482f-a754-4eb959894986
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-126988116623488 | finalize_polygon() completed
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-126988116623488 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-126988116623488 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-126988116623488 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 14:51:58 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-126988116623488 | ProfileInterpretationTool.reset() completed
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-126988116623488 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-126988116623488 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-126988116623488 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-126988116623488 | ProfileInterpretationTool.reset() completed
2026-01-18 14:51:59 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-126988116623488 | Failed to create locator for layer layer1: mock error
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-126988116623488 | ProfileInterpretationTool.activate() called
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-126988116623488 | ProfileInterpretationTool activated successfully
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-126988116623488 | ProfileInterpretationTool.deactivate() called
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-126988116623488 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-126988116623488 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-126988116623488 | ProfileInterpretationTool.reset() completed
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-126988116623488 | ProfileInterpretationTool deactivated successfully
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:224 | Thread-126988116623488 | Inherited attributes from geology: Limestone
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-126988116623488 | Loaded 0 interpretations from project
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-126988116623488 | Loaded 1 interpretations from project
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-126988116623488 | Saved 1 interpretations to project
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: buffer_dist = 100.5
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-126988116623488 | Persistent interpretations cleared by reset
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:348 | Thread-126988116623488 | Dialog reset to defaults by user
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:400 | Thread-126988116623488 | Setting saved to project: test_layer = id_123
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:400 | Thread-126988116623488 | Setting saved to project: test_layer_name = RealName
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: test_layer = 1.0
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:380 | Thread-126988116623488 | Project setting hit: test_layer_name = RealName
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:437 | Thread-126988116623488 | Restoring layer: test_layer -> RealName
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-126988116623488 | Point 1 added: 0.00, 0.00
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-126988116623488 | Point 2 added: 100.00, 100.00
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-126988116623488 | Point 1 added: 50.00, 50.00
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-126988116623488 | reset() called, finalized=False
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-126988116623488 | finalize_measurement called with 1 points
2026-01-18 14:51:59 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-126988116623488 | Cannot finalize measurement with less than 2 points
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-126988116623488 | finalize_measurement called with 2 points
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-126988116623488 | Setting finalized = True
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-126988116623488 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-126988116623488 | Switching to pan tool to stop measurement
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-126988116623488 | Pan tool activated - measurement should be frozen
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-126988116623488 | Ignoring click - measurement is finalized
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-126988116623488 | finalize_measurement called with 2 points
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-126988116623488 | Setting finalized = True
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-126988116623488 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-126988116623488 | Switching to pan tool to stop measurement
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-126988116623488 | Pan tool activated - measurement should be frozen
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-126988116623488 | reset() called, finalized=False
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-126988116623488 | reset() called, finalized=False
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-126988116623488 | reset() called, finalized=True
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-126988116623488 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-126988116623488 | reset() called, finalized=False
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-126988116623488 | finalize_measurement called with 2 points
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-126988116623488 | Setting finalized = True
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-126988116623488 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-126988116623488 | Rubber band redrawn with final points only
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-126988116623488 | Switching to pan tool to stop measurement
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-126988116623488 | Pan tool activated - measurement should be frozen
2026-01-18 14:51:59 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-126988116623488 | Failed to create locator for layer layer1: mock error
2026-01-18 14:51:59 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-126988116623488 | Failed to create locator for layer l2: fail
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-126988116623488 | ProfileMeasureTool activated
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-126988116623488 | reset() called, finalized=False
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-126988116623488 | ProfileMeasureTool deactivated
2026-01-18 14:51:59 | WARNING  | SecInterp.sec_interp.gui.main_dialog_messages | handle_error:57 | Thread-126988116623488 | App Error: Validation failed - Details: Check inputs
2026-01-18 14:51:59 | ERROR    | SecInterp.sec_interp.gui.main_dialog_messages | handle_error:62 | Thread-126988116623488 | System Error: An unexpected error occurred: Something went wrong
Stack trace details
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-126988116623488 | create_drillhole_trace_layer called with 1 holes
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-126988116623488 | Adding 1 drillhole trace features to layer
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-126988116623488 | create_drillhole_trace_layer called with 1 holes
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-126988116623488 | Adding 1 drillhole trace features to layer
2026-01-18 14:51:59 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-126988116623488 | Failed to create memory layer: Fail
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-126988116623488 | create_drillhole_trace_layer called with 0 holes
2026-01-18 14:51:59 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-126988116623488 | No drillhole data provided for trace layer
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-126988116623488 | create_drillhole_trace_layer called with 1 holes
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-126988116623488 | Skipping hole H1: insufficient trace points (1)
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-126988116623488 | Adding 0 drillhole trace features to layer
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-126988116623488 | create_drillhole_trace_layer called with 1 holes
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126988116623488 | render() called
2026-01-18 14:51:59 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-126988116623488 | No valid layers to render
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126988116623488 | render() called
2026-01-18 14:51:59 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-126988116623488 | Error exporting preview
Traceback (most recent call last):
  File "/app/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
               ^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126988116623488 | render() called
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126988116623488 | render() called
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126988116623488 | render() called
2026-01-18 14:51:59 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-126988116623488 | No valid layers to render
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126988116623488 | render() called
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-126988116623488 | render() called
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-126988116623488 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-126988116623488 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126988116623488 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-126988116623488 | ProfileController initialized
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-126988116623488 | Loaded 0 interpretations from project
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: buffer_dist = 100.0
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dem_band = 1
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: scale = 50000.0
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: vert_exag = 1.0
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dh_use_geom = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: interp_inherit_geol = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: interp_inherit_drill = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: show_topo = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: show_geol = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: show_struct = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: show_drillholes = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: show_interpretations = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: auto_lod = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: adaptive_sampling = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: max_points = 10000
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-126988116623488 | Settings loaded successfully from Project/Global config
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-126988116623488 | Saved 1 interpretations to project
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126988116623488 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-126988116623488 | ProfileController initialized
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-126988116623488 | Loaded 0 interpretations from project
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: buffer_dist = 100.0
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dem_band = 1
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: scale = 50000.0
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: vert_exag = 1.0
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dh_use_geom = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: interp_inherit_geol = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: interp_inherit_drill = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: show_topo = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: show_geol = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: show_struct = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: show_drillholes = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: show_interpretations = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: auto_lod = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: adaptive_sampling = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: max_points = 10000
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-126988116623488 | Settings loaded successfully from Project/Global config
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-126988116623488 | Saved 1 interpretations to project
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-126988116623488 | Saved 0 interpretations to project
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126988116623488 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-126988116623488 | ProfileController initialized
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-126988116623488 | Loaded 0 interpretations from project
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: buffer_dist = 100.0
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dem_band = 1
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: scale = 50000.0
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: vert_exag = 1.0
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dh_use_geom = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: interp_inherit_geol = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: interp_inherit_drill = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: show_topo = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: show_geol = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: show_struct = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: show_drillholes = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: show_interpretations = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: auto_lod = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: adaptive_sampling = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: max_points = 10000
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-126988116623488 | Settings loaded successfully from Project/Global config
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-126988116623488 | Loaded 1 interpretations from project
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-126988116623488 | Point 1 added: 0.00, 0.00
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-126988116623488 | Point 2 added: 10.00, 10.00
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-126988116623488 | finalize_measurement called with 2 points
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-126988116623488 | Setting finalized = True
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-126988116623488 | Measurement finalized: 2 points, 14.14m total distance
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-126988116623488 | Rubber band redrawn with final points only
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-126988116623488 | Switching to pan tool to stop measurement
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-126988116623488 | Pan tool activated - measurement should be frozen
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-126988116623488 | reset() called, finalized=True
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-126988116623488 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-126988116623488 | Point 1 added: 0.00, 0.00
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-126988116623488 | Point 2 added: 100.00, 100.00
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-126988116623488 | Point 3 added: 200.00, 150.00
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-126988116623488 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-126988116623488 | ProfileController initialized
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-126988116623488 | Loaded 1 interpretations from project
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: buffer_dist = 100.0
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dem_band = 1
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: scale = 50000.0
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: vert_exag = 1.0
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: dh_use_geom = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: interp_inherit_geol = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: interp_inherit_drill = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: show_topo = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: show_geol = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: show_struct = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: show_drillholes = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: show_interpretations = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: auto_lod = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: adaptive_sampling = True
2026-01-18 14:51:59 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-126988116623488 | Global setting fallback: max_points = 10000
2026-01-18 14:51:59 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-126988116623488 | Settings loaded successfully from Project/Global config
2026-01-18 14:53:38 | DEBUG    | SecInterp | setup_logging:142 | Thread-129292552421504 | Logging system initialized. Root Level: 10
2026-01-18 14:53:38 | DEBUG    | SecInterp | setup_logging:143 | Thread-129292552421504 | File logging path: /app/sec_interp/logs/sec_interp_debug.log
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-129292552421504 | Configuration reset to defaults initiated
2026-01-18 14:53:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129292552421504 | Config set: SecInterp/scale = 50000.0
2026-01-18 14:53:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129292552421504 | Config set: SecInterp/vert_exag = 1.0
2026-01-18 14:53:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129292552421504 | Config set: SecInterp/buffer_dist = 100.0
2026-01-18 14:53:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129292552421504 | Config set: SecInterp/show_topo = True
2026-01-18 14:53:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129292552421504 | Config set: SecInterp/show_geol = True
2026-01-18 14:53:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129292552421504 | Config set: SecInterp/show_struct = True
2026-01-18 14:53:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129292552421504 | Config set: SecInterp/show_drillholes = True
2026-01-18 14:53:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129292552421504 | Config set: SecInterp/show_interpretations = True
2026-01-18 14:53:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129292552421504 | Config set: SecInterp/interp_inherit_geol = True
2026-01-18 14:53:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129292552421504 | Config set: SecInterp/interp_inherit_drill = True
2026-01-18 14:53:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129292552421504 | Config set: SecInterp/dh_use_geom = True
2026-01-18 14:53:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129292552421504 | Config set: SecInterp/auto_lod = False
2026-01-18 14:53:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129292552421504 | Config set: SecInterp/adaptive_sampling = True
2026-01-18 14:53:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129292552421504 | Config set: SecInterp/max_points = 10000
2026-01-18 14:53:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129292552421504 | Config set: SecInterp/dem_band = 1
2026-01-18 14:53:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129292552421504 | Config set: SecInterp/scale = 200.0
2026-01-18 14:53:38 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129292552421504 | Config set: SecInterp/scale = 20000.0
2026-01-18 14:53:38 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-129292552421504 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:53:38 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-129292552421504 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:53:38 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-129292552421504 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-129292552421504 | Projecting collars from Test Layer with buffer 50.0m
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:106 | Thread-129292552421504 | No collars found within buffer area.
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-129292552421504 | Projecting collars from Test Layer with buffer 50.0m
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:127 | Thread-129292552421504 | DrillholeService.project_collars END: Found 1 collars.
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-129292552421504 | ✓ Saving profile axes...
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-129292552421504 | ✓ Saving topographic profile...
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-129292552421504 | ✓ Saving profile axes...
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-129292552421504 | ✓ Saving interpretation data...
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-129292552421504 | 3D Export features are restricted for this user.
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-129292552421504 | ✓ Saving topographic profile...
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-129292552421504 | ✓ Saving profile axes...
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-129292552421504 | ✓ Saving interpretation data...
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-129292552421504 | ✓ Saving 3D interpretation data...
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-129292552421504 | ✓ Saving topographic profile...
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-129292552421504 | ✓ Saving profile axes...
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-129292552421504 | ✓ Saving geological profile...
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-129292552421504 | ✓ Saving structural profile...
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-129292552421504 | ✓ Saving drillhole data...
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-129292552421504 | ✓ Saving interpretation data...
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-129292552421504 | Access denied for restricted feature: 3D Export
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-129292552421504 | 3D Export features are restricted for this user.
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-129292552421504 | ✓ Saving topographic profile...
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-129292552421504 | ✓ Saving profile axes...
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-129292552421504 | No interpretations provided for export.
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-129292552421504 | ✓ Saving drillhole data...
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-129292552421504 | ✓ Saving geological profile...
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-129292552421504 | ✓ Saving interpretation data...
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-129292552421504 | ✓ Saving 3D interpretation data...
2026-01-18 14:53:38 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-129292552421504 | Invalid section line layer, skipping 3D export.
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-129292552421504 | ✓ Saving interpretation data...
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-129292552421504 | ✓ Saving structural profile...
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-129292552421504 | ✓ Saving topographic profile...
2026-01-18 14:53:38 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-129292552421504 | Generating master profile with interval=10.00
2026-01-18 14:53:38 | INFO     | SecInterp.performance | measure_operation:244 | Thread-129292552421504 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0064, 'memory_mb': 0.0, 'memory_peak_mb': 0.32, 'timestamp': '2026-01-18 14:53:38', 'args_count': 5, 'kwargs_keys': []}
2026-01-18 14:53:38 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-129292552421504 | Generating master profile with interval=50.00
2026-01-18 14:53:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-129292552421504 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-18 14:53:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-129292552421504 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-18 14:53:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-129292552421504 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-18 14:53:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-129292552421504 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-18 14:53:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-129292552421504 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-18 14:53:38 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-129292552421504 | Running geometry operation: test
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-129292552421504 | Generated 1 drillhole traces
2026-01-18 14:53:38 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-129292552421504 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-18 14:53:38 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:251 | Thread-129292552421504 | Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-129292552421504 | Generated 1 drillhole traces
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:171 | Thread-129292552421504 | Drillhole preview skipped: No Collar ID field selected.
2026-01-18 14:53:38 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-129292552421504 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 14:53:38 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-129292552421504 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 14:53:38 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-129292552421504 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 14:53:38 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-129292552421504 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 14:53:38 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-129292552421504 | Buffer creation failed
Traceback (most recent call last):
  File "/app/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-129292552421504 | Analyzing structures in Structure Layer with buffer 10m
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-129292552421504 | Processed 1 structural measurements from Structure Layer
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-129292552421504 | Successfully exported to /tmp/test_dynamic.shp
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-129292552421504 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-129292552421504 | Generated QML style: /tmp/test.qml
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-129292552421504 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-129292552421504 | Generated QML style: dummy.qml
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-129292552421504 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-129292552421504 | Generated QML style: dummy.qml
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-129292552421504 | Loaded 0 interpretations from project
2026-01-18 14:53:38 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:224 | Thread-129292552421504 | Inherited attributes from geology: GeologyUnit
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-129292552421504 | Loaded 0 interpretations from project
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: section_layer = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: section_layer_name = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-129292552421504 | Failed to restore layer for section_layer
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: buffer_dist = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dem_layer = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dem_layer_name = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-129292552421504 | Failed to restore layer for dem_layer
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dem_band = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: scale = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: vert_exag = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: geol_layer = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: geol_layer_name = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-129292552421504 | Failed to restore layer for geol_layer
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: geol_field = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: struct_layer = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: struct_layer_name = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-129292552421504 | Failed to restore layer for struct_layer
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: struct_dip_field = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: struct_strike_field = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dh_collar_layer = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-129292552421504 | Failed to restore layer for dh_collar_layer
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dh_collar_id = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dh_use_geom = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dh_collar_x = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dh_collar_y = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dh_collar_z = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dh_collar_depth = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dh_survey_layer = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-129292552421504 | Failed to restore layer for dh_survey_layer
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dh_survey_id = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dh_survey_depth = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dh_survey_azim = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dh_survey_incl = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dh_interval_layer = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-129292552421504 | Failed to restore layer for dh_interval_layer
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dh_interval_id = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dh_interval_from = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dh_interval_to = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dh_interval_lith = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: last_output_dir = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: interp_custom_fields = 1.0
2026-01-18 14:53:39 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-129292552421504 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: show_topo = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: show_geol = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: show_struct = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: show_drillholes = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: show_interpretations = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: auto_lod = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: adaptive_sampling = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: max_points = 1.0
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-129292552421504 | Settings loaded successfully from Project/Global config
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.main_dialog_cache_handler | clear_cache:25 | Thread-129292552421504 | Cache cleared by user
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-129292552421504 | GeologyGenerationTask started (Background Thread)
2026-01-18 14:53:39 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-129292552421504 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/app/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-129292552421504 | GeologyGenerationTask started (Background Thread)
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-129292552421504 | GeologyGenerationTask finished with 1 segments
2026-01-18 14:53:39 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-129292552421504 | Test Title: Test Message
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-129292552421504 | Test Title: Test Message
2026-01-18 14:53:39 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-129292552421504 | Test Title: Test Message
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-129292552421504 | CRITICAL_OP: finalize_polygon | points=2
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-129292552421504 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-18 14:53:39 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-129292552421504 | finalize_polygon() aborted - less than 3 points
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-129292552421504 | CRITICAL_OP: finalize_polygon | points=3
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-129292552421504 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-129292552421504 | finalize_polygon() - emitting polygonFinished signal for f562d860-e8e7-40ca-9b84-fad5963a84f4
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-129292552421504 | Interpretation polygon finalized with 3 vertices, ID: f562d860-e8e7-40ca-9b84-fad5963a84f4
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-129292552421504 | finalize_polygon() completed
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-129292552421504 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-129292552421504 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-129292552421504 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-129292552421504 | ProfileInterpretationTool.reset() completed
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-129292552421504 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-129292552421504 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-129292552421504 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-129292552421504 | ProfileInterpretationTool.reset() completed
2026-01-18 14:53:39 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-129292552421504 | Failed to create locator for layer layer1: mock error
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-129292552421504 | ProfileInterpretationTool.activate() called
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-129292552421504 | ProfileInterpretationTool activated successfully
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-129292552421504 | ProfileInterpretationTool.deactivate() called
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-129292552421504 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-129292552421504 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-129292552421504 | ProfileInterpretationTool.reset() completed
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-129292552421504 | ProfileInterpretationTool deactivated successfully
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:224 | Thread-129292552421504 | Inherited attributes from geology: Limestone
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-129292552421504 | Loaded 0 interpretations from project
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-129292552421504 | Loaded 1 interpretations from project
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-129292552421504 | Saved 1 interpretations to project
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: buffer_dist = 100.5
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-129292552421504 | Persistent interpretations cleared by reset
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:348 | Thread-129292552421504 | Dialog reset to defaults by user
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:400 | Thread-129292552421504 | Setting saved to project: test_layer = id_123
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:400 | Thread-129292552421504 | Setting saved to project: test_layer_name = RealName
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: test_layer = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:380 | Thread-129292552421504 | Project setting hit: test_layer_name = RealName
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:437 | Thread-129292552421504 | Restoring layer: test_layer -> RealName
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-129292552421504 | Point 1 added: 0.00, 0.00
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-129292552421504 | Point 2 added: 100.00, 100.00
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-129292552421504 | Point 1 added: 50.00, 50.00
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-129292552421504 | reset() called, finalized=False
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-129292552421504 | finalize_measurement called with 1 points
2026-01-18 14:53:39 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-129292552421504 | Cannot finalize measurement with less than 2 points
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-129292552421504 | finalize_measurement called with 2 points
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-129292552421504 | Setting finalized = True
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-129292552421504 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-129292552421504 | Switching to pan tool to stop measurement
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-129292552421504 | Pan tool activated - measurement should be frozen
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-129292552421504 | Ignoring click - measurement is finalized
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-129292552421504 | finalize_measurement called with 2 points
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-129292552421504 | Setting finalized = True
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-129292552421504 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-129292552421504 | Switching to pan tool to stop measurement
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-129292552421504 | Pan tool activated - measurement should be frozen
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-129292552421504 | reset() called, finalized=False
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-129292552421504 | reset() called, finalized=False
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-129292552421504 | reset() called, finalized=True
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-129292552421504 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-129292552421504 | reset() called, finalized=False
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-129292552421504 | finalize_measurement called with 2 points
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-129292552421504 | Setting finalized = True
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-129292552421504 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-129292552421504 | Rubber band redrawn with final points only
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-129292552421504 | Switching to pan tool to stop measurement
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-129292552421504 | Pan tool activated - measurement should be frozen
2026-01-18 14:53:39 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-129292552421504 | Failed to create locator for layer layer1: mock error
2026-01-18 14:53:39 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-129292552421504 | Failed to create locator for layer l2: fail
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-129292552421504 | ProfileMeasureTool activated
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-129292552421504 | reset() called, finalized=False
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-129292552421504 | ProfileMeasureTool deactivated
2026-01-18 14:53:39 | WARNING  | SecInterp.sec_interp.gui.main_dialog_messages | handle_error:57 | Thread-129292552421504 | App Error: Validation failed - Details: Check inputs
2026-01-18 14:53:39 | ERROR    | SecInterp.sec_interp.gui.main_dialog_messages | handle_error:62 | Thread-129292552421504 | System Error: An unexpected error occurred: Something went wrong
Stack trace details
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129292552421504 | create_drillhole_trace_layer called with 1 holes
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-129292552421504 | Adding 1 drillhole trace features to layer
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129292552421504 | create_drillhole_trace_layer called with 1 holes
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-129292552421504 | Adding 1 drillhole trace features to layer
2026-01-18 14:53:39 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-129292552421504 | Failed to create memory layer: Fail
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129292552421504 | create_drillhole_trace_layer called with 0 holes
2026-01-18 14:53:39 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-129292552421504 | No drillhole data provided for trace layer
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129292552421504 | create_drillhole_trace_layer called with 1 holes
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-129292552421504 | Skipping hole H1: insufficient trace points (1)
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-129292552421504 | Adding 0 drillhole trace features to layer
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129292552421504 | create_drillhole_trace_layer called with 1 holes
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129292552421504 | render() called
2026-01-18 14:53:39 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-129292552421504 | No valid layers to render
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129292552421504 | render() called
2026-01-18 14:53:39 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-129292552421504 | Error exporting preview
Traceback (most recent call last):
  File "/app/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
               ^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129292552421504 | render() called
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129292552421504 | render() called
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129292552421504 | render() called
2026-01-18 14:53:39 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-129292552421504 | No valid layers to render
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129292552421504 | render() called
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129292552421504 | render() called
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-129292552421504 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-129292552421504 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-129292552421504 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-129292552421504 | ProfileController initialized
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-129292552421504 | Loaded 0 interpretations from project
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: buffer_dist = 100.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dem_band = 1
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: scale = 50000.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: vert_exag = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dh_use_geom = True
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: interp_inherit_geol = True
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: interp_inherit_drill = True
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: show_topo = True
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: show_geol = True
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: show_struct = True
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: show_drillholes = True
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: show_interpretations = True
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: auto_lod = True
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: adaptive_sampling = True
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: max_points = 10000
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-129292552421504 | Settings loaded successfully from Project/Global config
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-129292552421504 | Saved 1 interpretations to project
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-129292552421504 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-129292552421504 | ProfileController initialized
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-129292552421504 | Loaded 0 interpretations from project
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: buffer_dist = 100.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dem_band = 1
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: scale = 50000.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: vert_exag = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dh_use_geom = True
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: interp_inherit_geol = True
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: interp_inherit_drill = True
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: show_topo = True
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: show_geol = True
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: show_struct = True
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: show_drillholes = True
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: show_interpretations = True
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: auto_lod = True
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: adaptive_sampling = True
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: max_points = 10000
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-129292552421504 | Settings loaded successfully from Project/Global config
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-129292552421504 | Saved 1 interpretations to project
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-129292552421504 | Saved 0 interpretations to project
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-129292552421504 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-129292552421504 | ProfileController initialized
2026-01-18 14:53:39 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-129292552421504 | Loaded 0 interpretations from project
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: buffer_dist = 100.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dem_band = 1
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: scale = 50000.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: vert_exag = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dh_use_geom = True
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: interp_inherit_geol = True
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: interp_inherit_drill = True
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: show_topo = True
2026-01-18 14:53:39 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: show_geol = True
2026-01-18 14:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: show_struct = True
2026-01-18 14:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: show_drillholes = True
2026-01-18 14:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: show_interpretations = True
2026-01-18 14:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: auto_lod = True
2026-01-18 14:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: adaptive_sampling = True
2026-01-18 14:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: max_points = 10000
2026-01-18 14:53:40 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-129292552421504 | Settings loaded successfully from Project/Global config
2026-01-18 14:53:40 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-129292552421504 | Loaded 1 interpretations from project
2026-01-18 14:53:40 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-129292552421504 | Point 1 added: 0.00, 0.00
2026-01-18 14:53:40 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-129292552421504 | Point 2 added: 10.00, 10.00
2026-01-18 14:53:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-129292552421504 | finalize_measurement called with 2 points
2026-01-18 14:53:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-129292552421504 | Setting finalized = True
2026-01-18 14:53:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-129292552421504 | Measurement finalized: 2 points, 14.14m total distance
2026-01-18 14:53:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-129292552421504 | Rubber band redrawn with final points only
2026-01-18 14:53:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-129292552421504 | Switching to pan tool to stop measurement
2026-01-18 14:53:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-129292552421504 | Pan tool activated - measurement should be frozen
2026-01-18 14:53:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-129292552421504 | reset() called, finalized=True
2026-01-18 14:53:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-129292552421504 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-18 14:53:40 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-129292552421504 | Point 1 added: 0.00, 0.00
2026-01-18 14:53:40 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-129292552421504 | Point 2 added: 100.00, 100.00
2026-01-18 14:53:40 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-129292552421504 | Point 3 added: 200.00, 150.00
2026-01-18 14:53:40 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-129292552421504 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:53:40 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-129292552421504 | ProfileController initialized
2026-01-18 14:53:40 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-129292552421504 | Loaded 1 interpretations from project
2026-01-18 14:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: buffer_dist = 100.0
2026-01-18 14:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dem_band = 1
2026-01-18 14:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: scale = 50000.0
2026-01-18 14:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: vert_exag = 1.0
2026-01-18 14:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 14:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: dh_use_geom = True
2026-01-18 14:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: interp_inherit_geol = True
2026-01-18 14:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: interp_inherit_drill = True
2026-01-18 14:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: show_topo = True
2026-01-18 14:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: show_geol = True
2026-01-18 14:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: show_struct = True
2026-01-18 14:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: show_drillholes = True
2026-01-18 14:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: show_interpretations = True
2026-01-18 14:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: auto_lod = True
2026-01-18 14:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: adaptive_sampling = True
2026-01-18 14:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129292552421504 | Global setting fallback: max_points = 10000
2026-01-18 14:53:40 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-129292552421504 | Settings loaded successfully from Project/Global config
2026-01-18 14:58:27 | DEBUG    | SecInterp | setup_logging:144 | Thread-128915020148864 | Logging system initialized. Root Level: 10
2026-01-18 14:58:27 | DEBUG    | SecInterp | setup_logging:145 | Thread-128915020148864 | File logging path: /app/sec_interp/logs/sec_interp_debug.log
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-128915020148864 | Configuration reset to defaults initiated
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128915020148864 | Config set: SecInterp/scale = 50000.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128915020148864 | Config set: SecInterp/vert_exag = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128915020148864 | Config set: SecInterp/buffer_dist = 100.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128915020148864 | Config set: SecInterp/show_topo = True
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128915020148864 | Config set: SecInterp/show_geol = True
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128915020148864 | Config set: SecInterp/show_struct = True
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128915020148864 | Config set: SecInterp/show_drillholes = True
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128915020148864 | Config set: SecInterp/show_interpretations = True
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128915020148864 | Config set: SecInterp/interp_inherit_geol = True
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128915020148864 | Config set: SecInterp/interp_inherit_drill = True
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128915020148864 | Config set: SecInterp/dh_use_geom = True
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128915020148864 | Config set: SecInterp/auto_lod = False
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128915020148864 | Config set: SecInterp/adaptive_sampling = True
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128915020148864 | Config set: SecInterp/max_points = 10000
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128915020148864 | Config set: SecInterp/dem_band = 1
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128915020148864 | Config set: SecInterp/scale = 200.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-128915020148864 | Config set: SecInterp/scale = 20000.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128915020148864 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128915020148864 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128915020148864 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:98 | Thread-128915020148864 | Projecting collars from Test Layer with buffer 50.0m
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:117 | Thread-128915020148864 | No collars found within buffer area.
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:98 | Thread-128915020148864 | Projecting collars from Test Layer with buffer 50.0m
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:138 | Thread-128915020148864 | DrillholeService.project_collars END: Found 1 collars.
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-128915020148864 | ✓ Saving profile axes...
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-128915020148864 | ✓ Saving topographic profile...
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-128915020148864 | ✓ Saving profile axes...
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-128915020148864 | ✓ Saving interpretation data...
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:324 | Thread-128915020148864 | 3D Export features are restricted for this user.
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-128915020148864 | ✓ Saving topographic profile...
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-128915020148864 | ✓ Saving profile axes...
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-128915020148864 | ✓ Saving interpretation data...
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:307 | Thread-128915020148864 | ✓ Saving 3D interpretation data...
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-128915020148864 | ✓ Saving topographic profile...
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-128915020148864 | ✓ Saving profile axes...
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:150 | Thread-128915020148864 | ✓ Saving geological profile...
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:178 | Thread-128915020148864 | ✓ Saving structural profile...
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:221 | Thread-128915020148864 | ✓ Saving drillhole data...
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-128915020148864 | ✓ Saving interpretation data...
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-128915020148864 | Access denied for restricted feature: 3D Export
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:324 | Thread-128915020148864 | 3D Export features are restricted for this user.
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-128915020148864 | ✓ Saving topographic profile...
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-128915020148864 | ✓ Saving profile axes...
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-128915020148864 | No interpretations provided for export.
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:221 | Thread-128915020148864 | ✓ Saving drillhole data...
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:150 | Thread-128915020148864 | ✓ Saving geological profile...
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-128915020148864 | ✓ Saving interpretation data...
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:307 | Thread-128915020148864 | ✓ Saving 3D interpretation data...
2026-01-18 14:58:28 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:322 | Thread-128915020148864 | Invalid section line layer, skipping 3D export.
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-128915020148864 | ✓ Saving interpretation data...
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:178 | Thread-128915020148864 | ✓ Saving structural profile...
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-128915020148864 | ✓ Saving topographic profile...
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:336 | Thread-128915020148864 | Generating master profile with interval=10.00
2026-01-18 14:58:28 | INFO     | SecInterp.performance | measure_operation:244 | Thread-128915020148864 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0079, 'memory_mb': 0.0, 'memory_peak_mb': 0.32, 'timestamp': '2026-01-18 14:58:28', 'args_count': 5, 'kwargs_keys': []}
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:336 | Thread-128915020148864 | Generating master profile with interval=50.00
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:61 | Thread-128915020148864 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:61 | Thread-128915020148864 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-128915020148864 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-128915020148864 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-128915020148864 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-128915020148864 | Running geometry operation: test
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:264 | Thread-128915020148864 | Generated 1 drillhole traces
2026-01-18 14:58:28 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:256 | Thread-128915020148864 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 238, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-18 14:58:28 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:261 | Thread-128915020148864 | Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 238, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 238, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:264 | Thread-128915020148864 | Generated 1 drillhole traces
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:177 | Thread-128915020148864 | Drillhole preview skipped: No Collar ID field selected.
2026-01-18 14:58:28 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-128915020148864 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 14:58:28 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-128915020148864 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 14:58:28 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:196 | Thread-128915020148864 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 191, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 14:58:28 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:321 | Thread-128915020148864 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 314, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 191, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 14:58:28 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:156 | Thread-128915020148864 | Buffer creation failed
Traceback (most recent call last):
  File "/app/sec_interp/core/services/structure_service.py", line 154, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-128915020148864 | Analyzing structures in Structure Layer with buffer 10m
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:128 | Thread-128915020148864 | Processed 1 structural measurements from Structure Layer
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:149 | Thread-128915020148864 | Successfully exported to /tmp/test_dynamic.shp
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-128915020148864 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:135 | Thread-128915020148864 | Generated QML style: /tmp/test.qml
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-128915020148864 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:135 | Thread-128915020148864 | Generated QML style: dummy.qml
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-128915020148864 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:135 | Thread-128915020148864 | Generated QML style: dummy.qml
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:59 | Thread-128915020148864 | Loaded 0 interpretations from project
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:234 | Thread-128915020148864 | Inherited attributes from geology: GeologyUnit
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:59 | Thread-128915020148864 | Loaded 0 interpretations from project
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: section_layer = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: section_layer_name = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:453 | Thread-128915020148864 | Failed to restore layer for section_layer
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: buffer_dist = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dem_layer = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dem_layer_name = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:453 | Thread-128915020148864 | Failed to restore layer for dem_layer
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dem_band = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: scale = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: vert_exag = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: geol_layer = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: geol_layer_name = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:453 | Thread-128915020148864 | Failed to restore layer for geol_layer
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: geol_field = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: struct_layer = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: struct_layer_name = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:453 | Thread-128915020148864 | Failed to restore layer for struct_layer
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: struct_dip_field = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: struct_strike_field = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dh_collar_layer = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:453 | Thread-128915020148864 | Failed to restore layer for dh_collar_layer
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dh_collar_id = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dh_use_geom = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dh_collar_x = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dh_collar_y = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dh_collar_z = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dh_collar_depth = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dh_survey_layer = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:453 | Thread-128915020148864 | Failed to restore layer for dh_survey_layer
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dh_survey_id = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dh_survey_depth = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dh_survey_azim = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dh_survey_incl = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dh_interval_layer = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:453 | Thread-128915020148864 | Failed to restore layer for dh_interval_layer
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dh_interval_id = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dh_interval_from = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dh_interval_to = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dh_interval_lith = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: last_output_dir = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: interp_custom_fields = 1.0
2026-01-18 14:58:28 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:172 | Thread-128915020148864 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: show_topo = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: show_geol = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: show_struct = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: show_drillholes = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: show_interpretations = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: auto_lod = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: adaptive_sampling = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: max_points = 1.0
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-128915020148864 | Settings loaded successfully from Project/Global config
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.gui.main_dialog_cache_handler | clear_cache:25 | Thread-128915020148864 | Cache cleared by user
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-128915020148864 | GeologyGenerationTask started (Background Thread)
2026-01-18 14:58:28 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:63 | Thread-128915020148864 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/app/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-128915020148864 | GeologyGenerationTask started (Background Thread)
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-128915020148864 | GeologyGenerationTask finished with 1 segments
2026-01-18 14:58:28 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-128915020148864 | Test Title: Test Message
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-128915020148864 | Test Title: Test Message
2026-01-18 14:58:28 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-128915020148864 | Test Title: Test Message
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-128915020148864 | CRITICAL_OP: finalize_polygon | points=2
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-128915020148864 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-18 14:58:28 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-128915020148864 | finalize_polygon() aborted - less than 3 points
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-128915020148864 | CRITICAL_OP: finalize_polygon | points=3
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-128915020148864 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:333 | Thread-128915020148864 | finalize_polygon() - emitting polygonFinished signal for 9f4a60ac-14d8-4894-8b9d-658f7237aa16
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:339 | Thread-128915020148864 | Interpretation polygon finalized with 3 vertices, ID: 9f4a60ac-14d8-4894-8b9d-658f7237aa16
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:342 | Thread-128915020148864 | finalize_polygon() completed
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-128915020148864 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-128915020148864 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-128915020148864 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-128915020148864 | ProfileInterpretationTool.reset() completed
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-128915020148864 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-128915020148864 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-128915020148864 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-128915020148864 | ProfileInterpretationTool.reset() completed
2026-01-18 14:58:28 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:111 | Thread-128915020148864 | Failed to create locator for layer layer1: mock error
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:142 | Thread-128915020148864 | ProfileInterpretationTool.activate() called
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:145 | Thread-128915020148864 | ProfileInterpretationTool activated successfully
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:150 | Thread-128915020148864 | ProfileInterpretationTool.deactivate() called
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-128915020148864 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-128915020148864 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-128915020148864 | ProfileInterpretationTool.reset() completed
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:153 | Thread-128915020148864 | ProfileInterpretationTool deactivated successfully
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:234 | Thread-128915020148864 | Inherited attributes from geology: Limestone
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:59 | Thread-128915020148864 | Loaded 0 interpretations from project
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:59 | Thread-128915020148864 | Loaded 1 interpretations from project
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:94 | Thread-128915020148864 | Saved 1 interpretations to project
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: buffer_dist = 100.5
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:353 | Thread-128915020148864 | Persistent interpretations cleared by reset
2026-01-18 14:58:28 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:358 | Thread-128915020148864 | Dialog reset to defaults by user
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:410 | Thread-128915020148864 | Setting saved to project: test_layer = id_123
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:410 | Thread-128915020148864 | Setting saved to project: test_layer_name = RealName
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: test_layer = 1.0
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:390 | Thread-128915020148864 | Project setting hit: test_layer_name = RealName
2026-01-18 14:58:28 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:447 | Thread-128915020148864 | Restoring layer: test_layer -> RealName
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-128915020148864 | Point 1 added: 0.00, 0.00
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-128915020148864 | Point 2 added: 100.00, 100.00
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-128915020148864 | Point 1 added: 50.00, 50.00
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-128915020148864 | reset() called, finalized=False
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-128915020148864 | finalize_measurement called with 1 points
2026-01-18 14:58:29 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:275 | Thread-128915020148864 | Cannot finalize measurement with less than 2 points
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-128915020148864 | finalize_measurement called with 2 points
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-128915020148864 | Setting finalized = True
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-128915020148864 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-128915020148864 | Switching to pan tool to stop measurement
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-128915020148864 | Pan tool activated - measurement should be frozen
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:202 | Thread-128915020148864 | Ignoring click - measurement is finalized
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-128915020148864 | finalize_measurement called with 2 points
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-128915020148864 | Setting finalized = True
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-128915020148864 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-128915020148864 | Switching to pan tool to stop measurement
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-128915020148864 | Pan tool activated - measurement should be frozen
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-128915020148864 | reset() called, finalized=False
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-128915020148864 | reset() called, finalized=False
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-128915020148864 | reset() called, finalized=True
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:159 | Thread-128915020148864 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-128915020148864 | reset() called, finalized=False
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-128915020148864 | finalize_measurement called with 2 points
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-128915020148864 | Setting finalized = True
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-128915020148864 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:298 | Thread-128915020148864 | Rubber band redrawn with final points only
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-128915020148864 | Switching to pan tool to stop measurement
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-128915020148864 | Pan tool activated - measurement should be frozen
2026-01-18 14:58:29 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:103 | Thread-128915020148864 | Failed to create locator for layer layer1: mock error
2026-01-18 14:58:29 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:103 | Thread-128915020148864 | Failed to create locator for layer l2: fail
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:141 | Thread-128915020148864 | ProfileMeasureTool activated
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-128915020148864 | reset() called, finalized=False
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:147 | Thread-128915020148864 | ProfileMeasureTool deactivated
2026-01-18 14:58:29 | WARNING  | SecInterp.sec_interp.gui.main_dialog_messages | handle_error:61 | Thread-128915020148864 | App Error: Validation failed - Details: Check inputs
2026-01-18 14:58:29 | ERROR    | SecInterp.sec_interp.gui.main_dialog_messages | handle_error:68 | Thread-128915020148864 | System Error: An unexpected error occurred: Something went wrong
Stack trace details
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-128915020148864 | create_drillhole_trace_layer called with 1 holes
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:393 | Thread-128915020148864 | Adding 1 drillhole trace features to layer
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-128915020148864 | create_drillhole_trace_layer called with 1 holes
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:393 | Thread-128915020148864 | Adding 1 drillhole trace features to layer
2026-01-18 14:58:29 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-128915020148864 | Failed to create memory layer: Fail
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-128915020148864 | create_drillhole_trace_layer called with 0 holes
2026-01-18 14:58:29 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-128915020148864 | No drillhole data provided for trace layer
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-128915020148864 | create_drillhole_trace_layer called with 1 holes
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:380 | Thread-128915020148864 | Skipping hole H1: insufficient trace points (1)
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:393 | Thread-128915020148864 | Adding 0 drillhole trace features to layer
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-128915020148864 | create_drillhole_trace_layer called with 1 holes
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128915020148864 | render() called
2026-01-18 14:58:29 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:156 | Thread-128915020148864 | No valid layers to render
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128915020148864 | render() called
2026-01-18 14:58:29 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:221 | Thread-128915020148864 | Error exporting preview
Traceback (most recent call last):
  File "/app/sec_interp/gui/preview_renderer.py", line 198, in export_to_image
    settings = QgsMapSettings()
               ^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128915020148864 | render() called
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128915020148864 | render() called
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128915020148864 | render() called
2026-01-18 14:58:29 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:156 | Thread-128915020148864 | No valid layers to render
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128915020148864 | render() called
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-128915020148864 | render() called
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-128915020148864 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-128915020148864 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128915020148864 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-128915020148864 | ProfileController initialized
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:59 | Thread-128915020148864 | Loaded 0 interpretations from project
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: buffer_dist = 100.0
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dem_band = 1
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: scale = 50000.0
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: vert_exag = 1.0
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dh_use_geom = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: interp_inherit_geol = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: interp_inherit_drill = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: show_topo = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: show_geol = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: show_struct = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: show_drillholes = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: show_interpretations = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: auto_lod = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: adaptive_sampling = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: max_points = 10000
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-128915020148864 | Settings loaded successfully from Project/Global config
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:94 | Thread-128915020148864 | Saved 1 interpretations to project
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128915020148864 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-128915020148864 | ProfileController initialized
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:59 | Thread-128915020148864 | Loaded 0 interpretations from project
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: buffer_dist = 100.0
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dem_band = 1
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: scale = 50000.0
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: vert_exag = 1.0
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dh_use_geom = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: interp_inherit_geol = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: interp_inherit_drill = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: show_topo = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: show_geol = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: show_struct = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: show_drillholes = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: show_interpretations = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: auto_lod = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: adaptive_sampling = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: max_points = 10000
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-128915020148864 | Settings loaded successfully from Project/Global config
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:94 | Thread-128915020148864 | Saved 1 interpretations to project
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:94 | Thread-128915020148864 | Saved 0 interpretations to project
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128915020148864 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-128915020148864 | ProfileController initialized
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:59 | Thread-128915020148864 | Loaded 0 interpretations from project
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: buffer_dist = 100.0
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dem_band = 1
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: scale = 50000.0
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: vert_exag = 1.0
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dh_use_geom = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: interp_inherit_geol = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: interp_inherit_drill = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: show_topo = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: show_geol = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: show_struct = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: show_drillholes = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: show_interpretations = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: auto_lod = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: adaptive_sampling = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: max_points = 10000
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-128915020148864 | Settings loaded successfully from Project/Global config
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:59 | Thread-128915020148864 | Loaded 1 interpretations from project
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-128915020148864 | Point 1 added: 0.00, 0.00
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-128915020148864 | Point 2 added: 10.00, 10.00
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-128915020148864 | finalize_measurement called with 2 points
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-128915020148864 | Setting finalized = True
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-128915020148864 | Measurement finalized: 2 points, 14.14m total distance
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:298 | Thread-128915020148864 | Rubber band redrawn with final points only
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-128915020148864 | Switching to pan tool to stop measurement
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-128915020148864 | Pan tool activated - measurement should be frozen
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-128915020148864 | reset() called, finalized=True
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:159 | Thread-128915020148864 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-128915020148864 | Point 1 added: 0.00, 0.00
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-128915020148864 | Point 2 added: 100.00, 100.00
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-128915020148864 | Point 3 added: 200.00, 150.00
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-128915020148864 | CacheService initialized (Default TTL: 3600s)
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-128915020148864 | ProfileController initialized
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:59 | Thread-128915020148864 | Loaded 1 interpretations from project
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: buffer_dist = 100.0
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dem_band = 1
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: scale = 50000.0
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: vert_exag = 1.0
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: dh_use_geom = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: interp_inherit_geol = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: interp_inherit_drill = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: show_topo = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: show_geol = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: show_struct = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: show_drillholes = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: show_interpretations = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: auto_lod = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: adaptive_sampling = True
2026-01-18 14:58:29 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-128915020148864 | Global setting fallback: max_points = 10000
2026-01-18 14:58:29 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-128915020148864 | Settings loaded successfully from Project/Global config
2026-01-18 12:40:44 | DEBUG    | SecInterp | setup_logging:142 | Thread-129563739409344 | Logging system initialized. Root Level: 10
2026-01-18 12:40:44 | DEBUG    | SecInterp | setup_logging:143 | Thread-129563739409344 | File logging path: /home/jmbernales/qgispluginsdev/sec_interp/logs/sec_interp_debug.log
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-129563739409344 | Configuration reset to defaults initiated
2026-01-18 12:40:44 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129563739409344 | Config set: SecInterp/scale = 50000.0
2026-01-18 12:40:44 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129563739409344 | Config set: SecInterp/vert_exag = 1.0
2026-01-18 12:40:44 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129563739409344 | Config set: SecInterp/buffer_dist = 100.0
2026-01-18 12:40:44 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129563739409344 | Config set: SecInterp/show_topo = True
2026-01-18 12:40:44 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129563739409344 | Config set: SecInterp/show_geol = True
2026-01-18 12:40:44 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129563739409344 | Config set: SecInterp/show_struct = True
2026-01-18 12:40:44 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129563739409344 | Config set: SecInterp/show_drillholes = True
2026-01-18 12:40:44 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129563739409344 | Config set: SecInterp/show_interpretations = True
2026-01-18 12:40:44 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129563739409344 | Config set: SecInterp/interp_inherit_geol = True
2026-01-18 12:40:44 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129563739409344 | Config set: SecInterp/interp_inherit_drill = True
2026-01-18 12:40:44 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129563739409344 | Config set: SecInterp/dh_use_geom = True
2026-01-18 12:40:44 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129563739409344 | Config set: SecInterp/auto_lod = False
2026-01-18 12:40:44 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129563739409344 | Config set: SecInterp/adaptive_sampling = True
2026-01-18 12:40:44 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129563739409344 | Config set: SecInterp/max_points = 10000
2026-01-18 12:40:44 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129563739409344 | Config set: SecInterp/dem_band = 1
2026-01-18 12:40:44 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129563739409344 | Config set: SecInterp/scale = 200.0
2026-01-18 12:40:44 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-129563739409344 | Config set: SecInterp/scale = 20000.0
2026-01-18 12:40:44 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-129563739409344 | CacheService initialized (Default TTL: 3600s)
2026-01-18 12:40:44 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-129563739409344 | CacheService initialized (Default TTL: 3600s)
2026-01-18 12:40:44 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-129563739409344 | CacheService initialized (Default TTL: 3600s)
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-129563739409344 | Projecting collars from Test Layer with buffer 50.0m
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:106 | Thread-129563739409344 | No collars found within buffer area.
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-129563739409344 | Projecting collars from Test Layer with buffer 50.0m
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:127 | Thread-129563739409344 | DrillholeService.project_collars END: Found 1 collars.
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-129563739409344 | ✓ Saving profile axes...
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-129563739409344 | ✓ Saving topographic profile...
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-129563739409344 | ✓ Saving profile axes...
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-129563739409344 | ✓ Saving interpretation data...
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-129563739409344 | 3D Export features are restricted for this user.
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-129563739409344 | ✓ Saving topographic profile...
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-129563739409344 | ✓ Saving profile axes...
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-129563739409344 | ✓ Saving interpretation data...
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-129563739409344 | ✓ Saving 3D interpretation data...
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-129563739409344 | ✓ Saving topographic profile...
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-129563739409344 | ✓ Saving profile axes...
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-129563739409344 | ✓ Saving geological profile...
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-129563739409344 | ✓ Saving structural profile...
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-129563739409344 | ✓ Saving drillhole data...
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-129563739409344 | ✓ Saving interpretation data...
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-129563739409344 | Access denied for restricted feature: 3D Export
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-129563739409344 | 3D Export features are restricted for this user.
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-129563739409344 | ✓ Saving topographic profile...
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-129563739409344 | ✓ Saving profile axes...
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-129563739409344 | No interpretations provided for export.
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-129563739409344 | ✓ Saving drillhole data...
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-129563739409344 | ✓ Saving geological profile...
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-129563739409344 | ✓ Saving interpretation data...
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-129563739409344 | ✓ Saving 3D interpretation data...
2026-01-18 12:40:44 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-129563739409344 | Invalid section line layer, skipping 3D export.
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-129563739409344 | ✓ Saving interpretation data...
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-129563739409344 | ✓ Saving structural profile...
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-129563739409344 | ✓ Saving topographic profile...
2026-01-18 12:40:44 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-129563739409344 | Generating master profile with interval=10.00
2026-01-18 12:40:44 | INFO     | SecInterp.performance | measure_operation:244 | Thread-129563739409344 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0059, 'memory_mb': 0.0, 'memory_peak_mb': 0.34, 'timestamp': '2026-01-18 12:40:44', 'args_count': 5, 'kwargs_keys': []}
2026-01-18 12:40:44 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-129563739409344 | Generating master profile with interval=50.00
2026-01-18 12:40:44 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-129563739409344 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-18 12:40:44 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-129563739409344 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-18 12:40:44 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-129563739409344 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-18 12:40:44 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-129563739409344 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-18 12:40:44 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-129563739409344 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-18 12:40:44 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-129563739409344 | Running geometry operation: test
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-129563739409344 | Generated 1 drillhole traces
2026-01-18 12:40:44 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-129563739409344 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-18 12:40:44 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:251 | Thread-129563739409344 | Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        collar_points=projected_collars,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<13 lines>...
        interval_fields=interval_fields,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-129563739409344 | Generated 1 drillhole traces
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:171 | Thread-129563739409344 | Drillhole preview skipped: No Collar ID field selected.
2026-01-18 12:40:44 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-129563739409344 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 12:40:44 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-129563739409344 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 12:40:44 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-129563739409344 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 12:40:44 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-129563739409344 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
  File "/home/jmbernales/qgispluginsdev/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 12:40:44 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-129563739409344 | Buffer creation failed
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-129563739409344 | Analyzing structures in Structure Layer with buffer 10m
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-129563739409344 | Processed 1 structural measurements from Structure Layer
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-129563739409344 | Successfully exported to /tmp/test_dynamic.shp
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-129563739409344 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-129563739409344 | Generated QML style: /tmp/test.qml
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-129563739409344 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-129563739409344 | Generated QML style: dummy.qml
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-129563739409344 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-18 12:40:44 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-129563739409344 | Generated QML style: dummy.qml
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-129563739409344 | Loaded 0 interpretations from project
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:224 | Thread-129563739409344 | Inherited attributes from geology: GeologyUnit
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-129563739409344 | Loaded 0 interpretations from project
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: section_layer = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: section_layer_name = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-129563739409344 | Failed to restore layer for section_layer
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: buffer_dist = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dem_layer = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dem_layer_name = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-129563739409344 | Failed to restore layer for dem_layer
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dem_band = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: scale = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: vert_exag = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: geol_layer = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: geol_layer_name = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-129563739409344 | Failed to restore layer for geol_layer
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: geol_field = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: struct_layer = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: struct_layer_name = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-129563739409344 | Failed to restore layer for struct_layer
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: struct_dip_field = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: struct_strike_field = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dh_collar_layer = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-129563739409344 | Failed to restore layer for dh_collar_layer
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dh_collar_id = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dh_use_geom = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dh_collar_x = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dh_collar_y = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dh_collar_z = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dh_collar_depth = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dh_survey_layer = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-129563739409344 | Failed to restore layer for dh_survey_layer
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dh_survey_id = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dh_survey_depth = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dh_survey_azim = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dh_survey_incl = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dh_interval_layer = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-129563739409344 | Failed to restore layer for dh_interval_layer
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dh_interval_id = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dh_interval_from = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dh_interval_to = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dh_interval_lith = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: last_output_dir = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: interp_custom_fields = 1.0
2026-01-18 12:40:45 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-129563739409344 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: show_topo = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: show_geol = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: show_struct = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: show_drillholes = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: show_interpretations = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: auto_lod = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: adaptive_sampling = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: max_points = 1.0
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-129563739409344 | Settings loaded successfully from Project/Global config
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.main_dialog_cache_handler | clear_cache:25 | Thread-129563739409344 | Cache cleared by user
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-129563739409344 | GeologyGenerationTask started (Background Thread)
2026-01-18 12:40:45 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-129563739409344 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-129563739409344 | GeologyGenerationTask started (Background Thread)
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-129563739409344 | GeologyGenerationTask finished with 1 segments
2026-01-18 12:40:45 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-129563739409344 | Test Title: Test Message
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-129563739409344 | Test Title: Test Message
2026-01-18 12:40:45 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-129563739409344 | Test Title: Test Message
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-129563739409344 | CRITICAL_OP: finalize_polygon | points=2
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-129563739409344 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-18 12:40:45 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-129563739409344 | finalize_polygon() aborted - less than 3 points
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-129563739409344 | CRITICAL_OP: finalize_polygon | points=3
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-129563739409344 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-129563739409344 | finalize_polygon() - emitting polygonFinished signal for d23635bc-da13-4363-a744-6f7a3d869737
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-129563739409344 | Interpretation polygon finalized with 3 vertices, ID: d23635bc-da13-4363-a744-6f7a3d869737
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-129563739409344 | finalize_polygon() completed
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-129563739409344 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-129563739409344 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-129563739409344 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-129563739409344 | ProfileInterpretationTool.reset() completed
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-129563739409344 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-129563739409344 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-129563739409344 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-129563739409344 | ProfileInterpretationTool.reset() completed
2026-01-18 12:40:45 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-129563739409344 | Failed to create locator for layer layer1: mock error
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-129563739409344 | ProfileInterpretationTool.activate() called
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-129563739409344 | ProfileInterpretationTool activated successfully
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-129563739409344 | ProfileInterpretationTool.deactivate() called
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-129563739409344 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-129563739409344 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-129563739409344 | ProfileInterpretationTool.reset() completed
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-129563739409344 | ProfileInterpretationTool deactivated successfully
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:224 | Thread-129563739409344 | Inherited attributes from geology: Limestone
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-129563739409344 | Loaded 0 interpretations from project
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-129563739409344 | Loaded 1 interpretations from project
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-129563739409344 | Saved 1 interpretations to project
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: buffer_dist = 100.5
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-129563739409344 | Persistent interpretations cleared by reset
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:348 | Thread-129563739409344 | Dialog reset to defaults by user
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:400 | Thread-129563739409344 | Setting saved to project: test_layer = id_123
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:400 | Thread-129563739409344 | Setting saved to project: test_layer_name = RealName
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: test_layer = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:380 | Thread-129563739409344 | Project setting hit: test_layer_name = RealName
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:437 | Thread-129563739409344 | Restoring layer: test_layer -> RealName
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-129563739409344 | Point 1 added: 0.00, 0.00
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-129563739409344 | Point 2 added: 100.00, 100.00
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-129563739409344 | Point 1 added: 50.00, 50.00
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-129563739409344 | reset() called, finalized=False
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-129563739409344 | finalize_measurement called with 1 points
2026-01-18 12:40:45 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-129563739409344 | Cannot finalize measurement with less than 2 points
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-129563739409344 | finalize_measurement called with 2 points
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-129563739409344 | Setting finalized = True
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-129563739409344 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-129563739409344 | Switching to pan tool to stop measurement
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-129563739409344 | Pan tool activated - measurement should be frozen
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-129563739409344 | Ignoring click - measurement is finalized
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-129563739409344 | finalize_measurement called with 2 points
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-129563739409344 | Setting finalized = True
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-129563739409344 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-129563739409344 | Switching to pan tool to stop measurement
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-129563739409344 | Pan tool activated - measurement should be frozen
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-129563739409344 | reset() called, finalized=False
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-129563739409344 | reset() called, finalized=False
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-129563739409344 | reset() called, finalized=True
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-129563739409344 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-129563739409344 | reset() called, finalized=False
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-129563739409344 | finalize_measurement called with 2 points
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-129563739409344 | Setting finalized = True
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-129563739409344 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-129563739409344 | Rubber band redrawn with final points only
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-129563739409344 | Switching to pan tool to stop measurement
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-129563739409344 | Pan tool activated - measurement should be frozen
2026-01-18 12:40:45 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-129563739409344 | Failed to create locator for layer layer1: mock error
2026-01-18 12:40:45 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-129563739409344 | Failed to create locator for layer l2: fail
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-129563739409344 | ProfileMeasureTool activated
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-129563739409344 | reset() called, finalized=False
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-129563739409344 | ProfileMeasureTool deactivated
2026-01-18 12:40:45 | WARNING  | SecInterp.sec_interp.gui.main_dialog_messages | handle_error:63 | Thread-129563739409344 | App Error: Validation failed - Details: Check inputs
2026-01-18 12:40:45 | ERROR    | SecInterp.sec_interp.gui.main_dialog_messages | handle_error:68 | Thread-129563739409344 | System Error: An unexpected error occurred: Something went wrong
Stack trace details
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129563739409344 | create_drillhole_trace_layer called with 1 holes
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-129563739409344 | Adding 1 drillhole trace features to layer
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129563739409344 | create_drillhole_trace_layer called with 1 holes
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-129563739409344 | Adding 1 drillhole trace features to layer
2026-01-18 12:40:45 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-129563739409344 | Failed to create memory layer: Fail
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129563739409344 | create_drillhole_trace_layer called with 0 holes
2026-01-18 12:40:45 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-129563739409344 | No drillhole data provided for trace layer
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129563739409344 | create_drillhole_trace_layer called with 1 holes
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-129563739409344 | Skipping hole H1: insufficient trace points (1)
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-129563739409344 | Adding 0 drillhole trace features to layer
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-129563739409344 | create_drillhole_trace_layer called with 1 holes
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129563739409344 | render() called
2026-01-18 12:40:45 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-129563739409344 | No valid layers to render
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129563739409344 | render() called
2026-01-18 12:40:45 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-129563739409344 | Error exporting preview
Traceback (most recent call last):
  File "/home/jmbernales/qgispluginsdev/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
  File "/usr/lib/python3.13/unittest/mock.py", line 1169, in __call__
    return self._mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1173, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/mock.py", line 1228, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129563739409344 | render() called
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129563739409344 | render() called
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129563739409344 | render() called
2026-01-18 12:40:45 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-129563739409344 | No valid layers to render
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129563739409344 | render() called
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-129563739409344 | render() called
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-129563739409344 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-129563739409344 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-129563739409344 | CacheService initialized (Default TTL: 3600s)
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-129563739409344 | ProfileController initialized
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-129563739409344 | Loaded 0 interpretations from project
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: buffer_dist = 100.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dem_band = 1
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: scale = 50000.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: vert_exag = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dh_use_geom = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: interp_inherit_geol = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: interp_inherit_drill = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: show_topo = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: show_geol = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: show_struct = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: show_drillholes = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: show_interpretations = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: auto_lod = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: adaptive_sampling = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: max_points = 10000
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-129563739409344 | Settings loaded successfully from Project/Global config
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-129563739409344 | Saved 1 interpretations to project
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-129563739409344 | CacheService initialized (Default TTL: 3600s)
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-129563739409344 | ProfileController initialized
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-129563739409344 | Loaded 0 interpretations from project
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: buffer_dist = 100.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dem_band = 1
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: scale = 50000.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: vert_exag = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dh_use_geom = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: interp_inherit_geol = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: interp_inherit_drill = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: show_topo = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: show_geol = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: show_struct = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: show_drillholes = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: show_interpretations = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: auto_lod = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: adaptive_sampling = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: max_points = 10000
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-129563739409344 | Settings loaded successfully from Project/Global config
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-129563739409344 | Saved 1 interpretations to project
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-129563739409344 | Saved 0 interpretations to project
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-129563739409344 | CacheService initialized (Default TTL: 3600s)
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-129563739409344 | ProfileController initialized
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-129563739409344 | Loaded 0 interpretations from project
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: buffer_dist = 100.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dem_band = 1
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: scale = 50000.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: vert_exag = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dh_use_geom = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: interp_inherit_geol = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: interp_inherit_drill = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: show_topo = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: show_geol = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: show_struct = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: show_drillholes = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: show_interpretations = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: auto_lod = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: adaptive_sampling = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: max_points = 10000
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-129563739409344 | Settings loaded successfully from Project/Global config
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-129563739409344 | Loaded 1 interpretations from project
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-129563739409344 | Point 1 added: 0.00, 0.00
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-129563739409344 | Point 2 added: 10.00, 10.00
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-129563739409344 | finalize_measurement called with 2 points
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-129563739409344 | Setting finalized = True
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-129563739409344 | Measurement finalized: 2 points, 14.14m total distance
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-129563739409344 | Rubber band redrawn with final points only
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-129563739409344 | Switching to pan tool to stop measurement
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-129563739409344 | Pan tool activated - measurement should be frozen
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-129563739409344 | reset() called, finalized=True
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-129563739409344 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-129563739409344 | Point 1 added: 0.00, 0.00
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-129563739409344 | Point 2 added: 100.00, 100.00
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-129563739409344 | Point 3 added: 200.00, 150.00
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-129563739409344 | CacheService initialized (Default TTL: 3600s)
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-129563739409344 | ProfileController initialized
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-129563739409344 | Loaded 1 interpretations from project
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: buffer_dist = 100.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dem_band = 1
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: scale = 50000.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: vert_exag = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: dh_use_geom = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: interp_inherit_geol = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: interp_inherit_drill = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: show_topo = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: show_geol = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: show_struct = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: show_drillholes = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: show_interpretations = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: auto_lod = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: adaptive_sampling = True
2026-01-18 12:40:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-129563739409344 | Global setting fallback: max_points = 10000
2026-01-18 12:40:45 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-129563739409344 | Settings loaded successfully from Project/Global config
2026-01-18 17:53:15 | DEBUG    | SecInterp | setup_logging:142 | Thread-132708341796992 | Logging system initialized. Root Level: 10
2026-01-18 17:53:15 | DEBUG    | SecInterp | setup_logging:143 | Thread-132708341796992 | File logging path: /app/sec_interp/logs/sec_interp_debug.log
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-132708341796992 | Configuration reset to defaults initiated
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132708341796992 | Config set: SecInterp/scale = 50000.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132708341796992 | Config set: SecInterp/vert_exag = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132708341796992 | Config set: SecInterp/buffer_dist = 100.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132708341796992 | Config set: SecInterp/show_topo = True
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132708341796992 | Config set: SecInterp/show_geol = True
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132708341796992 | Config set: SecInterp/show_struct = True
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132708341796992 | Config set: SecInterp/show_drillholes = True
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132708341796992 | Config set: SecInterp/show_interpretations = True
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132708341796992 | Config set: SecInterp/interp_inherit_geol = True
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132708341796992 | Config set: SecInterp/interp_inherit_drill = True
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132708341796992 | Config set: SecInterp/dh_use_geom = True
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132708341796992 | Config set: SecInterp/auto_lod = False
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132708341796992 | Config set: SecInterp/adaptive_sampling = True
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132708341796992 | Config set: SecInterp/max_points = 10000
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132708341796992 | Config set: SecInterp/dem_band = 1
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132708341796992 | Config set: SecInterp/scale = 200.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-132708341796992 | Config set: SecInterp/scale = 20000.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132708341796992 | CacheService initialized (Default TTL: 3600s)
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132708341796992 | CacheService initialized (Default TTL: 3600s)
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132708341796992 | CacheService initialized (Default TTL: 3600s)
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-132708341796992 | Projecting collars from Test Layer with buffer 50.0m
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:106 | Thread-132708341796992 | No collars found within buffer area.
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-132708341796992 | Projecting collars from Test Layer with buffer 50.0m
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:127 | Thread-132708341796992 | DrillholeService.project_collars END: Found 1 collars.
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-132708341796992 | ✓ Saving profile axes...
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-132708341796992 | ✓ Saving topographic profile...
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-132708341796992 | ✓ Saving profile axes...
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-132708341796992 | ✓ Saving interpretation data...
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-132708341796992 | 3D Export features are restricted for this user.
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-132708341796992 | ✓ Saving topographic profile...
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-132708341796992 | ✓ Saving profile axes...
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-132708341796992 | ✓ Saving interpretation data...
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-132708341796992 | ✓ Saving 3D interpretation data...
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-132708341796992 | ✓ Saving topographic profile...
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-132708341796992 | ✓ Saving profile axes...
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-132708341796992 | ✓ Saving geological profile...
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-132708341796992 | ✓ Saving structural profile...
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-132708341796992 | ✓ Saving drillhole data...
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-132708341796992 | ✓ Saving interpretation data...
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-132708341796992 | Access denied for restricted feature: 3D Export
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-132708341796992 | 3D Export features are restricted for this user.
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-132708341796992 | ✓ Saving topographic profile...
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-132708341796992 | ✓ Saving profile axes...
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-132708341796992 | No interpretations provided for export.
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-132708341796992 | ✓ Saving drillhole data...
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-132708341796992 | ✓ Saving geological profile...
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-132708341796992 | ✓ Saving interpretation data...
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-132708341796992 | ✓ Saving 3D interpretation data...
2026-01-18 17:53:16 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-132708341796992 | Invalid section line layer, skipping 3D export.
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-132708341796992 | ✓ Saving interpretation data...
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-132708341796992 | ✓ Saving structural profile...
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-132708341796992 | ✓ Saving topographic profile...
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-132708341796992 | Generating master profile with interval=10.00
2026-01-18 17:53:16 | INFO     | SecInterp.performance | measure_operation:244 | Thread-132708341796992 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0083, 'memory_mb': 0.0, 'memory_peak_mb': 0.32, 'timestamp': '2026-01-18 17:53:16', 'args_count': 5, 'kwargs_keys': []}
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-132708341796992 | Generating master profile with interval=50.00
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-132708341796992 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-132708341796992 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-132708341796992 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-132708341796992 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-132708341796992 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-132708341796992 | Running geometry operation: test
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-132708341796992 | Generated 1 drillhole traces
2026-01-18 17:53:16 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-132708341796992 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-18 17:53:16 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:251 | Thread-132708341796992 | Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-132708341796992 | Generated 1 drillhole traces
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:171 | Thread-132708341796992 | Drillhole preview skipped: No Collar ID field selected.
2026-01-18 17:53:16 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-132708341796992 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 17:53:16 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-132708341796992 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 17:53:16 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-132708341796992 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 17:53:16 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-132708341796992 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 17:53:16 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-132708341796992 | Buffer creation failed
Traceback (most recent call last):
  File "/app/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-132708341796992 | Analyzing structures in Structure Layer with buffer 10m
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-132708341796992 | Processed 1 structural measurements from Structure Layer
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-132708341796992 | Successfully exported to /tmp/test_dynamic.shp
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-132708341796992 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-132708341796992 | Generated QML style: /tmp/test.qml
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-132708341796992 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-132708341796992 | Generated QML style: dummy.qml
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-132708341796992 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-132708341796992 | Generated QML style: dummy.qml
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-132708341796992 | Loaded 0 interpretations from project
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:224 | Thread-132708341796992 | Inherited attributes from geology: GeologyUnit
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-132708341796992 | Loaded 0 interpretations from project
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: section_layer = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: section_layer_name = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-132708341796992 | Failed to restore layer for section_layer
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: buffer_dist = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dem_layer = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dem_layer_name = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-132708341796992 | Failed to restore layer for dem_layer
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dem_band = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: scale = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: vert_exag = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: geol_layer = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: geol_layer_name = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-132708341796992 | Failed to restore layer for geol_layer
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: geol_field = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: struct_layer = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: struct_layer_name = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-132708341796992 | Failed to restore layer for struct_layer
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: struct_dip_field = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: struct_strike_field = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dh_collar_layer = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-132708341796992 | Failed to restore layer for dh_collar_layer
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dh_collar_id = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dh_use_geom = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dh_collar_x = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dh_collar_y = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dh_collar_z = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dh_collar_depth = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dh_survey_layer = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-132708341796992 | Failed to restore layer for dh_survey_layer
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dh_survey_id = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dh_survey_depth = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dh_survey_azim = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dh_survey_incl = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dh_interval_layer = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-132708341796992 | Failed to restore layer for dh_interval_layer
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dh_interval_id = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dh_interval_from = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dh_interval_to = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dh_interval_lith = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: last_output_dir = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: interp_custom_fields = 1.0
2026-01-18 17:53:16 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-132708341796992 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: show_topo = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: show_geol = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: show_struct = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: show_drillholes = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: show_interpretations = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: auto_lod = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: adaptive_sampling = 1.0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: max_points = 1.0
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-132708341796992 | Settings loaded successfully from Project/Global config
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.gui.main_dialog_cache_handler | clear_cache:25 | Thread-132708341796992 | Cache cleared by user
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-132708341796992 | GeologyGenerationTask started (Background Thread)
2026-01-18 17:53:16 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-132708341796992 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/app/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-132708341796992 | GeologyGenerationTask started (Background Thread)
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-132708341796992 | GeologyGenerationTask finished with 1 segments
2026-01-18 17:53:16 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-132708341796992 | Test Title: Test Message
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-132708341796992 | Test Title: Test Message
2026-01-18 17:53:16 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-132708341796992 | Test Title: Test Message
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-132708341796992 | CRITICAL_OP: finalize_polygon | points=2
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-132708341796992 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-18 17:53:16 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-132708341796992 | finalize_polygon() aborted - less than 3 points
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-132708341796992 | CRITICAL_OP: finalize_polygon | points=3
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-132708341796992 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-132708341796992 | finalize_polygon() - emitting polygonFinished signal for b5f29ac5-cc3c-4efc-885d-9b456cb0aa8f
2026-01-18 17:53:16 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-132708341796992 | Interpretation polygon finalized with 3 vertices, ID: b5f29ac5-cc3c-4efc-885d-9b456cb0aa8f
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-132708341796992 | finalize_polygon() completed
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-132708341796992 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-132708341796992 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-132708341796992 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-132708341796992 | ProfileInterpretationTool.reset() completed
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-132708341796992 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-132708341796992 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-132708341796992 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 17:53:16 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-132708341796992 | ProfileInterpretationTool.reset() completed
2026-01-18 17:53:17 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-132708341796992 | Failed to create locator for layer layer1: mock error
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-132708341796992 | ProfileInterpretationTool.activate() called
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-132708341796992 | ProfileInterpretationTool activated successfully
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-132708341796992 | ProfileInterpretationTool.deactivate() called
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-132708341796992 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-132708341796992 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-132708341796992 | ProfileInterpretationTool.reset() completed
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-132708341796992 | ProfileInterpretationTool deactivated successfully
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:224 | Thread-132708341796992 | Inherited attributes from geology: Limestone
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-132708341796992 | Loaded 0 interpretations from project
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-132708341796992 | Loaded 1 interpretations from project
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-132708341796992 | Saved 1 interpretations to project
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: buffer_dist = 100.5
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-132708341796992 | Persistent interpretations cleared by reset
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:348 | Thread-132708341796992 | Dialog reset to defaults by user
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:400 | Thread-132708341796992 | Setting saved to project: test_layer = id_123
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:400 | Thread-132708341796992 | Setting saved to project: test_layer_name = RealName
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: test_layer = 1.0
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:380 | Thread-132708341796992 | Project setting hit: test_layer_name = RealName
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:437 | Thread-132708341796992 | Restoring layer: test_layer -> RealName
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-132708341796992 | Point 1 added: 0.00, 0.00
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-132708341796992 | Point 2 added: 100.00, 100.00
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-132708341796992 | Point 1 added: 50.00, 50.00
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-132708341796992 | reset() called, finalized=False
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-132708341796992 | finalize_measurement called with 1 points
2026-01-18 17:53:17 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-132708341796992 | Cannot finalize measurement with less than 2 points
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-132708341796992 | finalize_measurement called with 2 points
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-132708341796992 | Setting finalized = True
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-132708341796992 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-132708341796992 | Switching to pan tool to stop measurement
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-132708341796992 | Pan tool activated - measurement should be frozen
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-132708341796992 | Ignoring click - measurement is finalized
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-132708341796992 | finalize_measurement called with 2 points
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-132708341796992 | Setting finalized = True
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-132708341796992 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-132708341796992 | Switching to pan tool to stop measurement
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-132708341796992 | Pan tool activated - measurement should be frozen
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-132708341796992 | reset() called, finalized=False
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-132708341796992 | reset() called, finalized=False
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-132708341796992 | reset() called, finalized=True
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-132708341796992 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-132708341796992 | reset() called, finalized=False
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-132708341796992 | finalize_measurement called with 2 points
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-132708341796992 | Setting finalized = True
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-132708341796992 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-132708341796992 | Rubber band redrawn with final points only
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-132708341796992 | Switching to pan tool to stop measurement
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-132708341796992 | Pan tool activated - measurement should be frozen
2026-01-18 17:53:17 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-132708341796992 | Failed to create locator for layer layer1: mock error
2026-01-18 17:53:17 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-132708341796992 | Failed to create locator for layer l2: fail
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-132708341796992 | ProfileMeasureTool activated
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-132708341796992 | reset() called, finalized=False
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-132708341796992 | ProfileMeasureTool deactivated
2026-01-18 17:53:17 | WARNING  | SecInterp.sec_interp.gui.main_dialog_messages | handle_error:63 | Thread-132708341796992 | App Error: Validation failed - Details: Check inputs
2026-01-18 17:53:17 | ERROR    | SecInterp.sec_interp.gui.main_dialog_messages | handle_error:68 | Thread-132708341796992 | System Error: An unexpected error occurred: Something went wrong
Stack trace details
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-132708341796992 | create_drillhole_trace_layer called with 1 holes
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-132708341796992 | Adding 1 drillhole trace features to layer
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-132708341796992 | create_drillhole_trace_layer called with 1 holes
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-132708341796992 | Adding 1 drillhole trace features to layer
2026-01-18 17:53:17 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-132708341796992 | Failed to create memory layer: Fail
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-132708341796992 | create_drillhole_trace_layer called with 0 holes
2026-01-18 17:53:17 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-132708341796992 | No drillhole data provided for trace layer
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-132708341796992 | create_drillhole_trace_layer called with 1 holes
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-132708341796992 | Skipping hole H1: insufficient trace points (1)
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-132708341796992 | Adding 0 drillhole trace features to layer
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-132708341796992 | create_drillhole_trace_layer called with 1 holes
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132708341796992 | render() called
2026-01-18 17:53:17 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-132708341796992 | No valid layers to render
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132708341796992 | render() called
2026-01-18 17:53:17 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-132708341796992 | Error exporting preview
Traceback (most recent call last):
  File "/app/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
               ^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132708341796992 | render() called
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132708341796992 | render() called
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132708341796992 | render() called
2026-01-18 17:53:17 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-132708341796992 | No valid layers to render
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132708341796992 | render() called
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-132708341796992 | render() called
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-132708341796992 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-132708341796992 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132708341796992 | CacheService initialized (Default TTL: 3600s)
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-132708341796992 | ProfileController initialized
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-132708341796992 | Loaded 0 interpretations from project
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: buffer_dist = 100.0
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dem_band = 1
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: scale = 50000.0
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: vert_exag = 1.0
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dh_use_geom = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: interp_inherit_geol = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: interp_inherit_drill = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: show_topo = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: show_geol = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: show_struct = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: show_drillholes = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: show_interpretations = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: auto_lod = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: adaptive_sampling = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: max_points = 10000
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-132708341796992 | Settings loaded successfully from Project/Global config
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-132708341796992 | Saved 1 interpretations to project
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132708341796992 | CacheService initialized (Default TTL: 3600s)
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-132708341796992 | ProfileController initialized
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-132708341796992 | Loaded 0 interpretations from project
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: buffer_dist = 100.0
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dem_band = 1
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: scale = 50000.0
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: vert_exag = 1.0
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dh_use_geom = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: interp_inherit_geol = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: interp_inherit_drill = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: show_topo = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: show_geol = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: show_struct = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: show_drillholes = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: show_interpretations = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: auto_lod = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: adaptive_sampling = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: max_points = 10000
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-132708341796992 | Settings loaded successfully from Project/Global config
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-132708341796992 | Saved 1 interpretations to project
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-132708341796992 | Saved 0 interpretations to project
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132708341796992 | CacheService initialized (Default TTL: 3600s)
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-132708341796992 | ProfileController initialized
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-132708341796992 | Loaded 0 interpretations from project
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: buffer_dist = 100.0
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dem_band = 1
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: scale = 50000.0
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: vert_exag = 1.0
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dh_use_geom = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: interp_inherit_geol = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: interp_inherit_drill = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: show_topo = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: show_geol = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: show_struct = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: show_drillholes = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: show_interpretations = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: auto_lod = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: adaptive_sampling = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: max_points = 10000
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-132708341796992 | Settings loaded successfully from Project/Global config
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-132708341796992 | Loaded 1 interpretations from project
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-132708341796992 | Point 1 added: 0.00, 0.00
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-132708341796992 | Point 2 added: 10.00, 10.00
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-132708341796992 | finalize_measurement called with 2 points
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-132708341796992 | Setting finalized = True
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-132708341796992 | Measurement finalized: 2 points, 14.14m total distance
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-132708341796992 | Rubber band redrawn with final points only
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-132708341796992 | Switching to pan tool to stop measurement
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-132708341796992 | Pan tool activated - measurement should be frozen
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-132708341796992 | reset() called, finalized=True
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-132708341796992 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-132708341796992 | Point 1 added: 0.00, 0.00
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-132708341796992 | Point 2 added: 100.00, 100.00
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-132708341796992 | Point 3 added: 200.00, 150.00
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-132708341796992 | CacheService initialized (Default TTL: 3600s)
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-132708341796992 | ProfileController initialized
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-132708341796992 | Loaded 1 interpretations from project
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: buffer_dist = 100.0
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dem_band = 1
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: scale = 50000.0
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: vert_exag = 1.0
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: dh_use_geom = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: interp_inherit_geol = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: interp_inherit_drill = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: show_topo = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: show_geol = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: show_struct = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: show_drillholes = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: show_interpretations = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: auto_lod = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: adaptive_sampling = True
2026-01-18 17:53:17 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-132708341796992 | Global setting fallback: max_points = 10000
2026-01-18 17:53:17 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-132708341796992 | Settings loaded successfully from Project/Global config
2026-01-18 17:59:59 | DEBUG    | SecInterp | setup_logging:142 | Thread-125140769927296 | Logging system initialized. Root Level: 10
2026-01-18 17:59:59 | DEBUG    | SecInterp | setup_logging:143 | Thread-125140769927296 | File logging path: /app/sec_interp/logs/sec_interp_debug.log
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-125140769927296 | Configuration reset to defaults initiated
2026-01-18 17:59:59 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125140769927296 | Config set: SecInterp/scale = 50000.0
2026-01-18 17:59:59 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125140769927296 | Config set: SecInterp/vert_exag = 1.0
2026-01-18 17:59:59 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125140769927296 | Config set: SecInterp/buffer_dist = 100.0
2026-01-18 17:59:59 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125140769927296 | Config set: SecInterp/show_topo = True
2026-01-18 17:59:59 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125140769927296 | Config set: SecInterp/show_geol = True
2026-01-18 17:59:59 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125140769927296 | Config set: SecInterp/show_struct = True
2026-01-18 17:59:59 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125140769927296 | Config set: SecInterp/show_drillholes = True
2026-01-18 17:59:59 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125140769927296 | Config set: SecInterp/show_interpretations = True
2026-01-18 17:59:59 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125140769927296 | Config set: SecInterp/interp_inherit_geol = True
2026-01-18 17:59:59 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125140769927296 | Config set: SecInterp/interp_inherit_drill = True
2026-01-18 17:59:59 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125140769927296 | Config set: SecInterp/dh_use_geom = True
2026-01-18 17:59:59 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125140769927296 | Config set: SecInterp/auto_lod = False
2026-01-18 17:59:59 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125140769927296 | Config set: SecInterp/adaptive_sampling = True
2026-01-18 17:59:59 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125140769927296 | Config set: SecInterp/max_points = 10000
2026-01-18 17:59:59 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125140769927296 | Config set: SecInterp/dem_band = 1
2026-01-18 17:59:59 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125140769927296 | Config set: SecInterp/scale = 200.0
2026-01-18 17:59:59 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125140769927296 | Config set: SecInterp/scale = 20000.0
2026-01-18 17:59:59 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125140769927296 | CacheService initialized (Default TTL: 3600s)
2026-01-18 17:59:59 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125140769927296 | CacheService initialized (Default TTL: 3600s)
2026-01-18 17:59:59 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125140769927296 | CacheService initialized (Default TTL: 3600s)
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-125140769927296 | Projecting collars from Test Layer with buffer 50.0m
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:106 | Thread-125140769927296 | No collars found within buffer area.
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-125140769927296 | Projecting collars from Test Layer with buffer 50.0m
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:127 | Thread-125140769927296 | DrillholeService.project_collars END: Found 1 collars.
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-125140769927296 | ✓ Saving profile axes...
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-125140769927296 | ✓ Saving topographic profile...
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-125140769927296 | ✓ Saving profile axes...
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-125140769927296 | ✓ Saving interpretation data...
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-125140769927296 | 3D Export features are restricted for this user.
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-125140769927296 | ✓ Saving topographic profile...
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-125140769927296 | ✓ Saving profile axes...
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-125140769927296 | ✓ Saving interpretation data...
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-125140769927296 | ✓ Saving 3D interpretation data...
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-125140769927296 | ✓ Saving topographic profile...
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-125140769927296 | ✓ Saving profile axes...
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-125140769927296 | ✓ Saving geological profile...
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-125140769927296 | ✓ Saving structural profile...
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-125140769927296 | ✓ Saving drillhole data...
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-125140769927296 | ✓ Saving interpretation data...
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-125140769927296 | Access denied for restricted feature: 3D Export
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-125140769927296 | 3D Export features are restricted for this user.
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-125140769927296 | ✓ Saving topographic profile...
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-125140769927296 | ✓ Saving profile axes...
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-125140769927296 | No interpretations provided for export.
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-125140769927296 | ✓ Saving drillhole data...
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-125140769927296 | ✓ Saving geological profile...
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-125140769927296 | ✓ Saving interpretation data...
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-125140769927296 | ✓ Saving 3D interpretation data...
2026-01-18 17:59:59 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-125140769927296 | Invalid section line layer, skipping 3D export.
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-125140769927296 | ✓ Saving interpretation data...
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-125140769927296 | ✓ Saving structural profile...
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-125140769927296 | ✓ Saving topographic profile...
2026-01-18 17:59:59 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-125140769927296 | Generating master profile with interval=10.00
2026-01-18 17:59:59 | INFO     | SecInterp.performance | measure_operation:244 | Thread-125140769927296 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0072, 'memory_mb': 0.0, 'memory_peak_mb': 0.32, 'timestamp': '2026-01-18 17:59:59', 'args_count': 5, 'kwargs_keys': []}
2026-01-18 17:59:59 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-125140769927296 | Generating master profile with interval=50.00
2026-01-18 17:59:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-125140769927296 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-18 17:59:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-125140769927296 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-18 17:59:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-125140769927296 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-18 17:59:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-125140769927296 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-18 17:59:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-125140769927296 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-18 17:59:59 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-125140769927296 | Running geometry operation: test
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-125140769927296 | Generated 1 drillhole traces
2026-01-18 17:59:59 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-125140769927296 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-18 17:59:59 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:251 | Thread-125140769927296 | Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-125140769927296 | Generated 1 drillhole traces
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:171 | Thread-125140769927296 | Drillhole preview skipped: No Collar ID field selected.
2026-01-18 17:59:59 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-125140769927296 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 17:59:59 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-125140769927296 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 17:59:59 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-125140769927296 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 17:59:59 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-125140769927296 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 17:59:59 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-125140769927296 | Buffer creation failed
Traceback (most recent call last):
  File "/app/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-125140769927296 | Analyzing structures in Structure Layer with buffer 10m
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-125140769927296 | Processed 1 structural measurements from Structure Layer
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-125140769927296 | Successfully exported to /tmp/test_dynamic.shp
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-125140769927296 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-125140769927296 | Generated QML style: /tmp/test.qml
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-125140769927296 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-125140769927296 | Generated QML style: dummy.qml
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-125140769927296 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-18 17:59:59 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-125140769927296 | Generated QML style: dummy.qml
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-125140769927296 | Loaded 0 interpretations from project
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:224 | Thread-125140769927296 | Inherited attributes from geology: GeologyUnit
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-125140769927296 | Loaded 0 interpretations from project
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: section_layer = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: section_layer_name = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-125140769927296 | Failed to restore layer for section_layer
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: buffer_dist = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dem_layer = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dem_layer_name = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-125140769927296 | Failed to restore layer for dem_layer
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dem_band = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: scale = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: vert_exag = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: geol_layer = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: geol_layer_name = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-125140769927296 | Failed to restore layer for geol_layer
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: geol_field = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: struct_layer = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: struct_layer_name = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-125140769927296 | Failed to restore layer for struct_layer
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: struct_dip_field = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: struct_strike_field = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dh_collar_layer = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-125140769927296 | Failed to restore layer for dh_collar_layer
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dh_collar_id = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dh_use_geom = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dh_collar_x = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dh_collar_y = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dh_collar_z = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dh_collar_depth = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dh_survey_layer = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-125140769927296 | Failed to restore layer for dh_survey_layer
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dh_survey_id = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dh_survey_depth = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dh_survey_azim = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dh_survey_incl = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dh_interval_layer = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-125140769927296 | Failed to restore layer for dh_interval_layer
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dh_interval_id = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dh_interval_from = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dh_interval_to = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dh_interval_lith = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: last_output_dir = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: interp_custom_fields = 1.0
2026-01-18 18:00:00 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-125140769927296 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: show_topo = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: show_geol = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: show_struct = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: show_drillholes = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: show_interpretations = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: auto_lod = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: adaptive_sampling = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: max_points = 1.0
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-125140769927296 | Settings loaded successfully from Project/Global config
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.main_dialog_cache_handler | clear_cache:25 | Thread-125140769927296 | Cache cleared by user
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-125140769927296 | GeologyGenerationTask started (Background Thread)
2026-01-18 18:00:00 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-125140769927296 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/app/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-125140769927296 | GeologyGenerationTask started (Background Thread)
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-125140769927296 | GeologyGenerationTask finished with 1 segments
2026-01-18 18:00:00 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-125140769927296 | Test Title: Test Message
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-125140769927296 | Test Title: Test Message
2026-01-18 18:00:00 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-125140769927296 | Test Title: Test Message
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-125140769927296 | CRITICAL_OP: finalize_polygon | points=2
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-125140769927296 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-18 18:00:00 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-125140769927296 | finalize_polygon() aborted - less than 3 points
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-125140769927296 | CRITICAL_OP: finalize_polygon | points=3
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-125140769927296 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-125140769927296 | finalize_polygon() - emitting polygonFinished signal for 9b06402c-bc77-47f0-b383-eba2aadf12b3
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-125140769927296 | Interpretation polygon finalized with 3 vertices, ID: 9b06402c-bc77-47f0-b383-eba2aadf12b3
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-125140769927296 | finalize_polygon() completed
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-125140769927296 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-125140769927296 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-125140769927296 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-125140769927296 | ProfileInterpretationTool.reset() completed
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-125140769927296 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-125140769927296 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-125140769927296 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-125140769927296 | ProfileInterpretationTool.reset() completed
2026-01-18 18:00:00 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-125140769927296 | Failed to create locator for layer layer1: mock error
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-125140769927296 | ProfileInterpretationTool.activate() called
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-125140769927296 | ProfileInterpretationTool activated successfully
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-125140769927296 | ProfileInterpretationTool.deactivate() called
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-125140769927296 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-125140769927296 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-125140769927296 | ProfileInterpretationTool.reset() completed
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-125140769927296 | ProfileInterpretationTool deactivated successfully
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:224 | Thread-125140769927296 | Inherited attributes from geology: Limestone
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-125140769927296 | Loaded 0 interpretations from project
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-125140769927296 | Loaded 1 interpretations from project
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-125140769927296 | Saved 1 interpretations to project
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: buffer_dist = 100.5
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-125140769927296 | Persistent interpretations cleared by reset
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:348 | Thread-125140769927296 | Dialog reset to defaults by user
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:400 | Thread-125140769927296 | Setting saved to project: test_layer = id_123
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:400 | Thread-125140769927296 | Setting saved to project: test_layer_name = RealName
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: test_layer = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:380 | Thread-125140769927296 | Project setting hit: test_layer_name = RealName
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:437 | Thread-125140769927296 | Restoring layer: test_layer -> RealName
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-125140769927296 | Point 1 added: 0.00, 0.00
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-125140769927296 | Point 2 added: 100.00, 100.00
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-125140769927296 | Point 1 added: 50.00, 50.00
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-125140769927296 | reset() called, finalized=False
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-125140769927296 | finalize_measurement called with 1 points
2026-01-18 18:00:00 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-125140769927296 | Cannot finalize measurement with less than 2 points
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-125140769927296 | finalize_measurement called with 2 points
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-125140769927296 | Setting finalized = True
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-125140769927296 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-125140769927296 | Switching to pan tool to stop measurement
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-125140769927296 | Pan tool activated - measurement should be frozen
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-125140769927296 | Ignoring click - measurement is finalized
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-125140769927296 | finalize_measurement called with 2 points
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-125140769927296 | Setting finalized = True
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-125140769927296 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-125140769927296 | Switching to pan tool to stop measurement
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-125140769927296 | Pan tool activated - measurement should be frozen
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-125140769927296 | reset() called, finalized=False
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-125140769927296 | reset() called, finalized=False
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-125140769927296 | reset() called, finalized=True
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-125140769927296 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-125140769927296 | reset() called, finalized=False
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-125140769927296 | finalize_measurement called with 2 points
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-125140769927296 | Setting finalized = True
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-125140769927296 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-125140769927296 | Rubber band redrawn with final points only
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-125140769927296 | Switching to pan tool to stop measurement
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-125140769927296 | Pan tool activated - measurement should be frozen
2026-01-18 18:00:00 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-125140769927296 | Failed to create locator for layer layer1: mock error
2026-01-18 18:00:00 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-125140769927296 | Failed to create locator for layer l2: fail
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-125140769927296 | ProfileMeasureTool activated
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-125140769927296 | reset() called, finalized=False
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-125140769927296 | ProfileMeasureTool deactivated
2026-01-18 18:00:00 | WARNING  | SecInterp.sec_interp.gui.main_dialog_messages | handle_error:63 | Thread-125140769927296 | App Error: Validation failed - Details: Check inputs
2026-01-18 18:00:00 | ERROR    | SecInterp.sec_interp.gui.main_dialog_messages | handle_error:68 | Thread-125140769927296 | System Error: An unexpected error occurred: Something went wrong
Stack trace details
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-125140769927296 | create_drillhole_trace_layer called with 1 holes
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-125140769927296 | Adding 1 drillhole trace features to layer
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-125140769927296 | create_drillhole_trace_layer called with 1 holes
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-125140769927296 | Adding 1 drillhole trace features to layer
2026-01-18 18:00:00 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-125140769927296 | Failed to create memory layer: Fail
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-125140769927296 | create_drillhole_trace_layer called with 0 holes
2026-01-18 18:00:00 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-125140769927296 | No drillhole data provided for trace layer
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-125140769927296 | create_drillhole_trace_layer called with 1 holes
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-125140769927296 | Skipping hole H1: insufficient trace points (1)
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-125140769927296 | Adding 0 drillhole trace features to layer
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-125140769927296 | create_drillhole_trace_layer called with 1 holes
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-125140769927296 | render() called
2026-01-18 18:00:00 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-125140769927296 | No valid layers to render
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-125140769927296 | render() called
2026-01-18 18:00:00 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-125140769927296 | Error exporting preview
Traceback (most recent call last):
  File "/app/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
               ^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-125140769927296 | render() called
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-125140769927296 | render() called
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-125140769927296 | render() called
2026-01-18 18:00:00 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-125140769927296 | No valid layers to render
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-125140769927296 | render() called
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-125140769927296 | render() called
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-125140769927296 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-125140769927296 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125140769927296 | CacheService initialized (Default TTL: 3600s)
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-125140769927296 | ProfileController initialized
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-125140769927296 | Loaded 0 interpretations from project
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: buffer_dist = 100.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dem_band = 1
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: scale = 50000.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: vert_exag = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dh_use_geom = True
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: interp_inherit_geol = True
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: interp_inherit_drill = True
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: show_topo = True
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: show_geol = True
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: show_struct = True
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: show_drillholes = True
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: show_interpretations = True
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: auto_lod = True
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: adaptive_sampling = True
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: max_points = 10000
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-125140769927296 | Settings loaded successfully from Project/Global config
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-125140769927296 | Saved 1 interpretations to project
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125140769927296 | CacheService initialized (Default TTL: 3600s)
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-125140769927296 | ProfileController initialized
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-125140769927296 | Loaded 0 interpretations from project
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: buffer_dist = 100.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dem_band = 1
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: scale = 50000.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: vert_exag = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dh_use_geom = True
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: interp_inherit_geol = True
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: interp_inherit_drill = True
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: show_topo = True
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: show_geol = True
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: show_struct = True
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: show_drillholes = True
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: show_interpretations = True
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: auto_lod = True
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: adaptive_sampling = True
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: max_points = 10000
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-125140769927296 | Settings loaded successfully from Project/Global config
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-125140769927296 | Saved 1 interpretations to project
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-125140769927296 | Saved 0 interpretations to project
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125140769927296 | CacheService initialized (Default TTL: 3600s)
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-125140769927296 | ProfileController initialized
2026-01-18 18:00:00 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-125140769927296 | Loaded 0 interpretations from project
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: buffer_dist = 100.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dem_band = 1
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: scale = 50000.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: vert_exag = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dh_use_geom = True
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: interp_inherit_geol = True
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: interp_inherit_drill = True
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: show_topo = True
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: show_geol = True
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: show_struct = True
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: show_drillholes = True
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: show_interpretations = True
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: auto_lod = True
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: adaptive_sampling = True
2026-01-18 18:00:00 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: max_points = 10000
2026-01-18 18:00:01 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-125140769927296 | Settings loaded successfully from Project/Global config
2026-01-18 18:00:01 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-125140769927296 | Loaded 1 interpretations from project
2026-01-18 18:00:01 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-125140769927296 | Point 1 added: 0.00, 0.00
2026-01-18 18:00:01 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-125140769927296 | Point 2 added: 10.00, 10.00
2026-01-18 18:00:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-125140769927296 | finalize_measurement called with 2 points
2026-01-18 18:00:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-125140769927296 | Setting finalized = True
2026-01-18 18:00:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-125140769927296 | Measurement finalized: 2 points, 14.14m total distance
2026-01-18 18:00:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-125140769927296 | Rubber band redrawn with final points only
2026-01-18 18:00:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-125140769927296 | Switching to pan tool to stop measurement
2026-01-18 18:00:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-125140769927296 | Pan tool activated - measurement should be frozen
2026-01-18 18:00:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-125140769927296 | reset() called, finalized=True
2026-01-18 18:00:01 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-125140769927296 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-18 18:00:01 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-125140769927296 | Point 1 added: 0.00, 0.00
2026-01-18 18:00:01 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-125140769927296 | Point 2 added: 100.00, 100.00
2026-01-18 18:00:01 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-125140769927296 | Point 3 added: 200.00, 150.00
2026-01-18 18:00:01 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125140769927296 | CacheService initialized (Default TTL: 3600s)
2026-01-18 18:00:01 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-125140769927296 | ProfileController initialized
2026-01-18 18:00:01 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-125140769927296 | Loaded 1 interpretations from project
2026-01-18 18:00:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: buffer_dist = 100.0
2026-01-18 18:00:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dem_band = 1
2026-01-18 18:00:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: scale = 50000.0
2026-01-18 18:00:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: vert_exag = 1.0
2026-01-18 18:00:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 18:00:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: dh_use_geom = True
2026-01-18 18:00:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: interp_inherit_geol = True
2026-01-18 18:00:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: interp_inherit_drill = True
2026-01-18 18:00:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: show_topo = True
2026-01-18 18:00:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: show_geol = True
2026-01-18 18:00:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: show_struct = True
2026-01-18 18:00:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: show_drillholes = True
2026-01-18 18:00:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: show_interpretations = True
2026-01-18 18:00:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: auto_lod = True
2026-01-18 18:00:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: adaptive_sampling = True
2026-01-18 18:00:01 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125140769927296 | Global setting fallback: max_points = 10000
2026-01-18 18:00:01 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-125140769927296 | Settings loaded successfully from Project/Global config
2026-01-18 18:01:21 | DEBUG    | SecInterp | setup_logging:142 | Thread-127612680331392 | Logging system initialized. Root Level: 10
2026-01-18 18:01:21 | DEBUG    | SecInterp | setup_logging:143 | Thread-127612680331392 | File logging path: /app/sec_interp/logs/sec_interp_debug.log
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-127612680331392 | Configuration reset to defaults initiated
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127612680331392 | Config set: SecInterp/scale = 50000.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127612680331392 | Config set: SecInterp/vert_exag = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127612680331392 | Config set: SecInterp/buffer_dist = 100.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127612680331392 | Config set: SecInterp/show_topo = True
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127612680331392 | Config set: SecInterp/show_geol = True
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127612680331392 | Config set: SecInterp/show_struct = True
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127612680331392 | Config set: SecInterp/show_drillholes = True
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127612680331392 | Config set: SecInterp/show_interpretations = True
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127612680331392 | Config set: SecInterp/interp_inherit_geol = True
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127612680331392 | Config set: SecInterp/interp_inherit_drill = True
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127612680331392 | Config set: SecInterp/dh_use_geom = True
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127612680331392 | Config set: SecInterp/auto_lod = False
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127612680331392 | Config set: SecInterp/adaptive_sampling = True
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127612680331392 | Config set: SecInterp/max_points = 10000
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127612680331392 | Config set: SecInterp/dem_band = 1
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127612680331392 | Config set: SecInterp/scale = 200.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127612680331392 | Config set: SecInterp/scale = 20000.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-127612680331392 | CacheService initialized (Default TTL: 3600s)
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-127612680331392 | CacheService initialized (Default TTL: 3600s)
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-127612680331392 | CacheService initialized (Default TTL: 3600s)
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-127612680331392 | Projecting collars from Test Layer with buffer 50.0m
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:106 | Thread-127612680331392 | No collars found within buffer area.
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-127612680331392 | Projecting collars from Test Layer with buffer 50.0m
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:127 | Thread-127612680331392 | DrillholeService.project_collars END: Found 1 collars.
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-127612680331392 | ✓ Saving profile axes...
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-127612680331392 | ✓ Saving topographic profile...
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-127612680331392 | ✓ Saving profile axes...
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-127612680331392 | ✓ Saving interpretation data...
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-127612680331392 | 3D Export features are restricted for this user.
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-127612680331392 | ✓ Saving topographic profile...
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-127612680331392 | ✓ Saving profile axes...
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-127612680331392 | ✓ Saving interpretation data...
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-127612680331392 | ✓ Saving 3D interpretation data...
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-127612680331392 | ✓ Saving topographic profile...
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-127612680331392 | ✓ Saving profile axes...
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-127612680331392 | ✓ Saving geological profile...
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-127612680331392 | ✓ Saving structural profile...
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-127612680331392 | ✓ Saving drillhole data...
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-127612680331392 | ✓ Saving interpretation data...
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-127612680331392 | Access denied for restricted feature: 3D Export
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-127612680331392 | 3D Export features are restricted for this user.
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-127612680331392 | ✓ Saving topographic profile...
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-127612680331392 | ✓ Saving profile axes...
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-127612680331392 | No interpretations provided for export.
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-127612680331392 | ✓ Saving drillhole data...
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-127612680331392 | ✓ Saving geological profile...
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-127612680331392 | ✓ Saving interpretation data...
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-127612680331392 | ✓ Saving 3D interpretation data...
2026-01-18 18:01:22 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-127612680331392 | Invalid section line layer, skipping 3D export.
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-127612680331392 | ✓ Saving interpretation data...
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-127612680331392 | ✓ Saving structural profile...
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-127612680331392 | ✓ Saving topographic profile...
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-127612680331392 | Generating master profile with interval=10.00
2026-01-18 18:01:22 | INFO     | SecInterp.performance | measure_operation:244 | Thread-127612680331392 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0071, 'memory_mb': 0.0, 'memory_peak_mb': 0.32, 'timestamp': '2026-01-18 18:01:22', 'args_count': 5, 'kwargs_keys': []}
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-127612680331392 | Generating master profile with interval=50.00
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-127612680331392 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-127612680331392 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-127612680331392 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-127612680331392 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-127612680331392 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-127612680331392 | Running geometry operation: test
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-127612680331392 | Generated 1 drillhole traces
2026-01-18 18:01:22 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-127612680331392 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-18 18:01:22 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:251 | Thread-127612680331392 | Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-127612680331392 | Generated 1 drillhole traces
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:171 | Thread-127612680331392 | Drillhole preview skipped: No Collar ID field selected.
2026-01-18 18:01:22 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-127612680331392 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 18:01:22 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-127612680331392 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 18:01:22 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-127612680331392 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 18:01:22 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-127612680331392 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 18:01:22 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-127612680331392 | Buffer creation failed
Traceback (most recent call last):
  File "/app/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-127612680331392 | Analyzing structures in Structure Layer with buffer 10m
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-127612680331392 | Processed 1 structural measurements from Structure Layer
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-127612680331392 | Successfully exported to /tmp/test_dynamic.shp
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-127612680331392 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-127612680331392 | Generated QML style: /tmp/test.qml
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-127612680331392 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-127612680331392 | Generated QML style: dummy.qml
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-127612680331392 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-127612680331392 | Generated QML style: dummy.qml
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-127612680331392 | Loaded 0 interpretations from project
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:224 | Thread-127612680331392 | Inherited attributes from geology: GeologyUnit
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-127612680331392 | Loaded 0 interpretations from project
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: section_layer = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: section_layer_name = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-127612680331392 | Failed to restore layer for section_layer
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: buffer_dist = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dem_layer = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dem_layer_name = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-127612680331392 | Failed to restore layer for dem_layer
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dem_band = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: scale = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: vert_exag = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: geol_layer = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: geol_layer_name = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-127612680331392 | Failed to restore layer for geol_layer
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: geol_field = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: struct_layer = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: struct_layer_name = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-127612680331392 | Failed to restore layer for struct_layer
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: struct_dip_field = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: struct_strike_field = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dh_collar_layer = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-127612680331392 | Failed to restore layer for dh_collar_layer
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dh_collar_id = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dh_use_geom = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dh_collar_x = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dh_collar_y = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dh_collar_z = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dh_collar_depth = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dh_survey_layer = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-127612680331392 | Failed to restore layer for dh_survey_layer
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dh_survey_id = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dh_survey_depth = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dh_survey_azim = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dh_survey_incl = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dh_interval_layer = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-127612680331392 | Failed to restore layer for dh_interval_layer
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dh_interval_id = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dh_interval_from = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dh_interval_to = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dh_interval_lith = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: last_output_dir = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: interp_custom_fields = 1.0
2026-01-18 18:01:22 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-127612680331392 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: show_topo = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: show_geol = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: show_struct = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: show_drillholes = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: show_interpretations = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: auto_lod = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: adaptive_sampling = 1.0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: max_points = 1.0
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-127612680331392 | Settings loaded successfully from Project/Global config
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.gui.main_dialog_cache_handler | clear_cache:25 | Thread-127612680331392 | Cache cleared by user
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-127612680331392 | GeologyGenerationTask started (Background Thread)
2026-01-18 18:01:22 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-127612680331392 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/app/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-127612680331392 | GeologyGenerationTask started (Background Thread)
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-127612680331392 | GeologyGenerationTask finished with 1 segments
2026-01-18 18:01:22 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-127612680331392 | Test Title: Test Message
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-127612680331392 | Test Title: Test Message
2026-01-18 18:01:22 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-127612680331392 | Test Title: Test Message
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-127612680331392 | CRITICAL_OP: finalize_polygon | points=2
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-127612680331392 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-18 18:01:22 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-127612680331392 | finalize_polygon() aborted - less than 3 points
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-127612680331392 | CRITICAL_OP: finalize_polygon | points=3
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-127612680331392 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-127612680331392 | finalize_polygon() - emitting polygonFinished signal for 84f6988b-1f8f-49c8-9a11-be2d1140a59a
2026-01-18 18:01:22 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-127612680331392 | Interpretation polygon finalized with 3 vertices, ID: 84f6988b-1f8f-49c8-9a11-be2d1140a59a
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-127612680331392 | finalize_polygon() completed
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-127612680331392 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-127612680331392 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-127612680331392 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-127612680331392 | ProfileInterpretationTool.reset() completed
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-127612680331392 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-127612680331392 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-127612680331392 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 18:01:22 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-127612680331392 | ProfileInterpretationTool.reset() completed
2026-01-18 18:01:23 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-127612680331392 | Failed to create locator for layer layer1: mock error
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-127612680331392 | ProfileInterpretationTool.activate() called
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-127612680331392 | ProfileInterpretationTool activated successfully
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-127612680331392 | ProfileInterpretationTool.deactivate() called
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-127612680331392 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-127612680331392 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-127612680331392 | ProfileInterpretationTool.reset() completed
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-127612680331392 | ProfileInterpretationTool deactivated successfully
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:224 | Thread-127612680331392 | Inherited attributes from geology: Limestone
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-127612680331392 | Loaded 0 interpretations from project
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-127612680331392 | Loaded 1 interpretations from project
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-127612680331392 | Saved 1 interpretations to project
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: buffer_dist = 100.5
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-127612680331392 | Persistent interpretations cleared by reset
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:348 | Thread-127612680331392 | Dialog reset to defaults by user
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:400 | Thread-127612680331392 | Setting saved to project: test_layer = id_123
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:400 | Thread-127612680331392 | Setting saved to project: test_layer_name = RealName
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: test_layer = 1.0
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:380 | Thread-127612680331392 | Project setting hit: test_layer_name = RealName
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:437 | Thread-127612680331392 | Restoring layer: test_layer -> RealName
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-127612680331392 | Point 1 added: 0.00, 0.00
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-127612680331392 | Point 2 added: 100.00, 100.00
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-127612680331392 | Point 1 added: 50.00, 50.00
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-127612680331392 | reset() called, finalized=False
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-127612680331392 | finalize_measurement called with 1 points
2026-01-18 18:01:23 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-127612680331392 | Cannot finalize measurement with less than 2 points
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-127612680331392 | finalize_measurement called with 2 points
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-127612680331392 | Setting finalized = True
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-127612680331392 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-127612680331392 | Switching to pan tool to stop measurement
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-127612680331392 | Pan tool activated - measurement should be frozen
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-127612680331392 | Ignoring click - measurement is finalized
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-127612680331392 | finalize_measurement called with 2 points
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-127612680331392 | Setting finalized = True
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-127612680331392 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-127612680331392 | Switching to pan tool to stop measurement
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-127612680331392 | Pan tool activated - measurement should be frozen
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-127612680331392 | reset() called, finalized=False
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-127612680331392 | reset() called, finalized=False
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-127612680331392 | reset() called, finalized=True
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-127612680331392 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-127612680331392 | reset() called, finalized=False
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-127612680331392 | finalize_measurement called with 2 points
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-127612680331392 | Setting finalized = True
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-127612680331392 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-127612680331392 | Rubber band redrawn with final points only
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-127612680331392 | Switching to pan tool to stop measurement
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-127612680331392 | Pan tool activated - measurement should be frozen
2026-01-18 18:01:23 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-127612680331392 | Failed to create locator for layer layer1: mock error
2026-01-18 18:01:23 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-127612680331392 | Failed to create locator for layer l2: fail
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-127612680331392 | ProfileMeasureTool activated
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-127612680331392 | reset() called, finalized=False
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-127612680331392 | ProfileMeasureTool deactivated
2026-01-18 18:01:23 | WARNING  | SecInterp.sec_interp.gui.main_dialog_messages | handle_error:63 | Thread-127612680331392 | App Error: Validation failed - Details: Check inputs
2026-01-18 18:01:23 | ERROR    | SecInterp.sec_interp.gui.main_dialog_messages | handle_error:68 | Thread-127612680331392 | System Error: An unexpected error occurred: Something went wrong
Stack trace details
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-127612680331392 | create_drillhole_trace_layer called with 1 holes
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-127612680331392 | Adding 1 drillhole trace features to layer
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-127612680331392 | create_drillhole_trace_layer called with 1 holes
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-127612680331392 | Adding 1 drillhole trace features to layer
2026-01-18 18:01:23 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-127612680331392 | Failed to create memory layer: Fail
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-127612680331392 | create_drillhole_trace_layer called with 0 holes
2026-01-18 18:01:23 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-127612680331392 | No drillhole data provided for trace layer
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-127612680331392 | create_drillhole_trace_layer called with 1 holes
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-127612680331392 | Skipping hole H1: insufficient trace points (1)
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-127612680331392 | Adding 0 drillhole trace features to layer
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-127612680331392 | create_drillhole_trace_layer called with 1 holes
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-127612680331392 | render() called
2026-01-18 18:01:23 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-127612680331392 | No valid layers to render
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-127612680331392 | render() called
2026-01-18 18:01:23 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-127612680331392 | Error exporting preview
Traceback (most recent call last):
  File "/app/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
               ^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-127612680331392 | render() called
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-127612680331392 | render() called
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-127612680331392 | render() called
2026-01-18 18:01:23 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-127612680331392 | No valid layers to render
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-127612680331392 | render() called
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-127612680331392 | render() called
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-127612680331392 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-127612680331392 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-127612680331392 | CacheService initialized (Default TTL: 3600s)
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-127612680331392 | ProfileController initialized
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-127612680331392 | Loaded 0 interpretations from project
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: buffer_dist = 100.0
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dem_band = 1
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: scale = 50000.0
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: vert_exag = 1.0
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dh_use_geom = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: interp_inherit_geol = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: interp_inherit_drill = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: show_topo = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: show_geol = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: show_struct = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: show_drillholes = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: show_interpretations = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: auto_lod = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: adaptive_sampling = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: max_points = 10000
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-127612680331392 | Settings loaded successfully from Project/Global config
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-127612680331392 | Saved 1 interpretations to project
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-127612680331392 | CacheService initialized (Default TTL: 3600s)
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-127612680331392 | ProfileController initialized
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-127612680331392 | Loaded 0 interpretations from project
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: buffer_dist = 100.0
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dem_band = 1
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: scale = 50000.0
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: vert_exag = 1.0
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dh_use_geom = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: interp_inherit_geol = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: interp_inherit_drill = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: show_topo = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: show_geol = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: show_struct = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: show_drillholes = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: show_interpretations = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: auto_lod = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: adaptive_sampling = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: max_points = 10000
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-127612680331392 | Settings loaded successfully from Project/Global config
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-127612680331392 | Saved 1 interpretations to project
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-127612680331392 | Saved 0 interpretations to project
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-127612680331392 | CacheService initialized (Default TTL: 3600s)
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-127612680331392 | ProfileController initialized
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-127612680331392 | Loaded 0 interpretations from project
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: buffer_dist = 100.0
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dem_band = 1
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: scale = 50000.0
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: vert_exag = 1.0
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dh_use_geom = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: interp_inherit_geol = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: interp_inherit_drill = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: show_topo = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: show_geol = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: show_struct = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: show_drillholes = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: show_interpretations = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: auto_lod = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: adaptive_sampling = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: max_points = 10000
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-127612680331392 | Settings loaded successfully from Project/Global config
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-127612680331392 | Loaded 1 interpretations from project
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-127612680331392 | Point 1 added: 0.00, 0.00
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-127612680331392 | Point 2 added: 10.00, 10.00
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-127612680331392 | finalize_measurement called with 2 points
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-127612680331392 | Setting finalized = True
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-127612680331392 | Measurement finalized: 2 points, 14.14m total distance
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-127612680331392 | Rubber band redrawn with final points only
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-127612680331392 | Switching to pan tool to stop measurement
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-127612680331392 | Pan tool activated - measurement should be frozen
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-127612680331392 | reset() called, finalized=True
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-127612680331392 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-127612680331392 | Point 1 added: 0.00, 0.00
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-127612680331392 | Point 2 added: 100.00, 100.00
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-127612680331392 | Point 3 added: 200.00, 150.00
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-127612680331392 | CacheService initialized (Default TTL: 3600s)
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-127612680331392 | ProfileController initialized
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-127612680331392 | Loaded 1 interpretations from project
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: buffer_dist = 100.0
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dem_band = 1
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: scale = 50000.0
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: vert_exag = 1.0
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: dh_use_geom = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: interp_inherit_geol = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: interp_inherit_drill = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: show_topo = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: show_geol = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: show_struct = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: show_drillholes = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: show_interpretations = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: auto_lod = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: adaptive_sampling = True
2026-01-18 18:01:23 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-127612680331392 | Global setting fallback: max_points = 10000
2026-01-18 18:01:23 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-127612680331392 | Settings loaded successfully from Project/Global config
2026-01-18 18:02:45 | DEBUG    | SecInterp | setup_logging:142 | Thread-125996470698112 | Logging system initialized. Root Level: 10
2026-01-18 18:02:45 | DEBUG    | SecInterp | setup_logging:143 | Thread-125996470698112 | File logging path: /app/sec_interp/logs/sec_interp_debug.log
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-125996470698112 | Configuration reset to defaults initiated
2026-01-18 18:02:45 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125996470698112 | Config set: SecInterp/scale = 50000.0
2026-01-18 18:02:45 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125996470698112 | Config set: SecInterp/vert_exag = 1.0
2026-01-18 18:02:45 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125996470698112 | Config set: SecInterp/buffer_dist = 100.0
2026-01-18 18:02:45 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125996470698112 | Config set: SecInterp/show_topo = True
2026-01-18 18:02:45 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125996470698112 | Config set: SecInterp/show_geol = True
2026-01-18 18:02:45 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125996470698112 | Config set: SecInterp/show_struct = True
2026-01-18 18:02:45 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125996470698112 | Config set: SecInterp/show_drillholes = True
2026-01-18 18:02:45 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125996470698112 | Config set: SecInterp/show_interpretations = True
2026-01-18 18:02:45 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125996470698112 | Config set: SecInterp/interp_inherit_geol = True
2026-01-18 18:02:45 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125996470698112 | Config set: SecInterp/interp_inherit_drill = True
2026-01-18 18:02:45 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125996470698112 | Config set: SecInterp/dh_use_geom = True
2026-01-18 18:02:45 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125996470698112 | Config set: SecInterp/auto_lod = False
2026-01-18 18:02:45 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125996470698112 | Config set: SecInterp/adaptive_sampling = True
2026-01-18 18:02:45 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125996470698112 | Config set: SecInterp/max_points = 10000
2026-01-18 18:02:45 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125996470698112 | Config set: SecInterp/dem_band = 1
2026-01-18 18:02:45 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125996470698112 | Config set: SecInterp/scale = 200.0
2026-01-18 18:02:45 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-125996470698112 | Config set: SecInterp/scale = 20000.0
2026-01-18 18:02:45 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125996470698112 | CacheService initialized (Default TTL: 3600s)
2026-01-18 18:02:45 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125996470698112 | CacheService initialized (Default TTL: 3600s)
2026-01-18 18:02:45 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125996470698112 | CacheService initialized (Default TTL: 3600s)
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-125996470698112 | Projecting collars from Test Layer with buffer 50.0m
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:106 | Thread-125996470698112 | No collars found within buffer area.
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-125996470698112 | Projecting collars from Test Layer with buffer 50.0m
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:127 | Thread-125996470698112 | DrillholeService.project_collars END: Found 1 collars.
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-125996470698112 | ✓ Saving profile axes...
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-125996470698112 | ✓ Saving topographic profile...
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-125996470698112 | ✓ Saving profile axes...
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-125996470698112 | ✓ Saving interpretation data...
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-125996470698112 | 3D Export features are restricted for this user.
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-125996470698112 | ✓ Saving topographic profile...
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-125996470698112 | ✓ Saving profile axes...
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-125996470698112 | ✓ Saving interpretation data...
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-125996470698112 | ✓ Saving 3D interpretation data...
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-125996470698112 | ✓ Saving topographic profile...
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-125996470698112 | ✓ Saving profile axes...
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-125996470698112 | ✓ Saving geological profile...
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-125996470698112 | ✓ Saving structural profile...
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-125996470698112 | ✓ Saving drillhole data...
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-125996470698112 | ✓ Saving interpretation data...
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-125996470698112 | Access denied for restricted feature: 3D Export
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-125996470698112 | 3D Export features are restricted for this user.
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-125996470698112 | ✓ Saving topographic profile...
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-125996470698112 | ✓ Saving profile axes...
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-125996470698112 | No interpretations provided for export.
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-125996470698112 | ✓ Saving drillhole data...
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-125996470698112 | ✓ Saving geological profile...
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-125996470698112 | ✓ Saving interpretation data...
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-125996470698112 | ✓ Saving 3D interpretation data...
2026-01-18 18:02:45 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-125996470698112 | Invalid section line layer, skipping 3D export.
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-125996470698112 | ✓ Saving interpretation data...
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-125996470698112 | ✓ Saving structural profile...
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-125996470698112 | ✓ Saving topographic profile...
2026-01-18 18:02:45 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-125996470698112 | Generating master profile with interval=10.00
2026-01-18 18:02:45 | INFO     | SecInterp.performance | measure_operation:244 | Thread-125996470698112 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0069, 'memory_mb': 0.0, 'memory_peak_mb': 0.32, 'timestamp': '2026-01-18 18:02:45', 'args_count': 5, 'kwargs_keys': []}
2026-01-18 18:02:45 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-125996470698112 | Generating master profile with interval=50.00
2026-01-18 18:02:45 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-125996470698112 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-18 18:02:45 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-125996470698112 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-18 18:02:45 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-125996470698112 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-18 18:02:45 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-125996470698112 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-18 18:02:45 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-125996470698112 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-18 18:02:45 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-125996470698112 | Running geometry operation: test
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-125996470698112 | Generated 1 drillhole traces
2026-01-18 18:02:45 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-125996470698112 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-18 18:02:45 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:251 | Thread-125996470698112 | Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-125996470698112 | Generated 1 drillhole traces
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:171 | Thread-125996470698112 | Drillhole preview skipped: No Collar ID field selected.
2026-01-18 18:02:45 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-125996470698112 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 18:02:45 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-125996470698112 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 18:02:45 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-125996470698112 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 18:02:45 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-125996470698112 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 18:02:45 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-125996470698112 | Buffer creation failed
Traceback (most recent call last):
  File "/app/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-125996470698112 | Analyzing structures in Structure Layer with buffer 10m
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-125996470698112 | Processed 1 structural measurements from Structure Layer
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-125996470698112 | Successfully exported to /tmp/test_dynamic.shp
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-125996470698112 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-125996470698112 | Generated QML style: /tmp/test.qml
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-125996470698112 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-125996470698112 | Generated QML style: dummy.qml
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-125996470698112 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-125996470698112 | Generated QML style: dummy.qml
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-125996470698112 | Loaded 0 interpretations from project
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:224 | Thread-125996470698112 | Inherited attributes from geology: GeologyUnit
2026-01-18 18:02:45 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-125996470698112 | Loaded 0 interpretations from project
2026-01-18 18:02:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: section_layer = 1.0
2026-01-18 18:02:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: section_layer_name = 1.0
2026-01-18 18:02:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-125996470698112 | Failed to restore layer for section_layer
2026-01-18 18:02:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: buffer_dist = 1.0
2026-01-18 18:02:45 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dem_layer = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dem_layer_name = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-125996470698112 | Failed to restore layer for dem_layer
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dem_band = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: scale = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: vert_exag = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: geol_layer = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: geol_layer_name = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-125996470698112 | Failed to restore layer for geol_layer
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: geol_field = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: struct_layer = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: struct_layer_name = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-125996470698112 | Failed to restore layer for struct_layer
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: struct_dip_field = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: struct_strike_field = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dh_collar_layer = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-125996470698112 | Failed to restore layer for dh_collar_layer
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dh_collar_id = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dh_use_geom = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dh_collar_x = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dh_collar_y = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dh_collar_z = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dh_collar_depth = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dh_survey_layer = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-125996470698112 | Failed to restore layer for dh_survey_layer
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dh_survey_id = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dh_survey_depth = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dh_survey_azim = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dh_survey_incl = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dh_interval_layer = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-125996470698112 | Failed to restore layer for dh_interval_layer
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dh_interval_id = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dh_interval_from = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dh_interval_to = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dh_interval_lith = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: last_output_dir = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: interp_custom_fields = 1.0
2026-01-18 18:02:46 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-125996470698112 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: show_topo = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: show_geol = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: show_struct = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: show_drillholes = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: show_interpretations = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: auto_lod = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: adaptive_sampling = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: max_points = 1.0
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-125996470698112 | Settings loaded successfully from Project/Global config
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.main_dialog_cache_handler | clear_cache:25 | Thread-125996470698112 | Cache cleared by user
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-125996470698112 | GeologyGenerationTask started (Background Thread)
2026-01-18 18:02:46 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-125996470698112 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/app/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-125996470698112 | GeologyGenerationTask started (Background Thread)
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-125996470698112 | GeologyGenerationTask finished with 1 segments
2026-01-18 18:02:46 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-125996470698112 | Test Title: Test Message
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-125996470698112 | Test Title: Test Message
2026-01-18 18:02:46 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-125996470698112 | Test Title: Test Message
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-125996470698112 | CRITICAL_OP: finalize_polygon | points=2
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-125996470698112 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-18 18:02:46 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-125996470698112 | finalize_polygon() aborted - less than 3 points
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-125996470698112 | CRITICAL_OP: finalize_polygon | points=3
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-125996470698112 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-125996470698112 | finalize_polygon() - emitting polygonFinished signal for 328548ec-dc81-4971-b892-53ed3a18dac6
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-125996470698112 | Interpretation polygon finalized with 3 vertices, ID: 328548ec-dc81-4971-b892-53ed3a18dac6
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-125996470698112 | finalize_polygon() completed
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-125996470698112 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-125996470698112 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-125996470698112 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-125996470698112 | ProfileInterpretationTool.reset() completed
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-125996470698112 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-125996470698112 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-125996470698112 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-125996470698112 | ProfileInterpretationTool.reset() completed
2026-01-18 18:02:46 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-125996470698112 | Failed to create locator for layer layer1: mock error
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-125996470698112 | ProfileInterpretationTool.activate() called
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-125996470698112 | ProfileInterpretationTool activated successfully
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-125996470698112 | ProfileInterpretationTool.deactivate() called
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-125996470698112 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-125996470698112 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-125996470698112 | ProfileInterpretationTool.reset() completed
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-125996470698112 | ProfileInterpretationTool deactivated successfully
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:224 | Thread-125996470698112 | Inherited attributes from geology: Limestone
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-125996470698112 | Loaded 0 interpretations from project
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-125996470698112 | Loaded 1 interpretations from project
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-125996470698112 | Saved 1 interpretations to project
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: buffer_dist = 100.5
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-125996470698112 | Persistent interpretations cleared by reset
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:348 | Thread-125996470698112 | Dialog reset to defaults by user
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:400 | Thread-125996470698112 | Setting saved to project: test_layer = id_123
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:400 | Thread-125996470698112 | Setting saved to project: test_layer_name = RealName
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: test_layer = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:380 | Thread-125996470698112 | Project setting hit: test_layer_name = RealName
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:437 | Thread-125996470698112 | Restoring layer: test_layer -> RealName
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-125996470698112 | Point 1 added: 0.00, 0.00
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-125996470698112 | Point 2 added: 100.00, 100.00
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-125996470698112 | Point 1 added: 50.00, 50.00
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-125996470698112 | reset() called, finalized=False
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-125996470698112 | finalize_measurement called with 1 points
2026-01-18 18:02:46 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-125996470698112 | Cannot finalize measurement with less than 2 points
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-125996470698112 | finalize_measurement called with 2 points
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-125996470698112 | Setting finalized = True
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-125996470698112 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-125996470698112 | Switching to pan tool to stop measurement
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-125996470698112 | Pan tool activated - measurement should be frozen
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-125996470698112 | Ignoring click - measurement is finalized
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-125996470698112 | finalize_measurement called with 2 points
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-125996470698112 | Setting finalized = True
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-125996470698112 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-125996470698112 | Switching to pan tool to stop measurement
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-125996470698112 | Pan tool activated - measurement should be frozen
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-125996470698112 | reset() called, finalized=False
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-125996470698112 | reset() called, finalized=False
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-125996470698112 | reset() called, finalized=True
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-125996470698112 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-125996470698112 | reset() called, finalized=False
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-125996470698112 | finalize_measurement called with 2 points
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-125996470698112 | Setting finalized = True
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-125996470698112 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-125996470698112 | Rubber band redrawn with final points only
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-125996470698112 | Switching to pan tool to stop measurement
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-125996470698112 | Pan tool activated - measurement should be frozen
2026-01-18 18:02:46 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-125996470698112 | Failed to create locator for layer layer1: mock error
2026-01-18 18:02:46 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-125996470698112 | Failed to create locator for layer l2: fail
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-125996470698112 | ProfileMeasureTool activated
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-125996470698112 | reset() called, finalized=False
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-125996470698112 | ProfileMeasureTool deactivated
2026-01-18 18:02:46 | WARNING  | SecInterp.sec_interp.gui.main_dialog_messages | handle_error:63 | Thread-125996470698112 | App Error: Validation failed - Details: Check inputs
2026-01-18 18:02:46 | ERROR    | SecInterp.sec_interp.gui.main_dialog_messages | handle_error:68 | Thread-125996470698112 | System Error: An unexpected error occurred: Something went wrong
Stack trace details
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-125996470698112 | create_drillhole_trace_layer called with 1 holes
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-125996470698112 | Adding 1 drillhole trace features to layer
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-125996470698112 | create_drillhole_trace_layer called with 1 holes
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-125996470698112 | Adding 1 drillhole trace features to layer
2026-01-18 18:02:46 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-125996470698112 | Failed to create memory layer: Fail
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-125996470698112 | create_drillhole_trace_layer called with 0 holes
2026-01-18 18:02:46 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-125996470698112 | No drillhole data provided for trace layer
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-125996470698112 | create_drillhole_trace_layer called with 1 holes
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-125996470698112 | Skipping hole H1: insufficient trace points (1)
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-125996470698112 | Adding 0 drillhole trace features to layer
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-125996470698112 | create_drillhole_trace_layer called with 1 holes
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-125996470698112 | render() called
2026-01-18 18:02:46 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-125996470698112 | No valid layers to render
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-125996470698112 | render() called
2026-01-18 18:02:46 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-125996470698112 | Error exporting preview
Traceback (most recent call last):
  File "/app/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
               ^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-125996470698112 | render() called
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-125996470698112 | render() called
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-125996470698112 | render() called
2026-01-18 18:02:46 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-125996470698112 | No valid layers to render
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-125996470698112 | render() called
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-125996470698112 | render() called
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-125996470698112 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-125996470698112 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125996470698112 | CacheService initialized (Default TTL: 3600s)
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-125996470698112 | ProfileController initialized
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-125996470698112 | Loaded 0 interpretations from project
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: buffer_dist = 100.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dem_band = 1
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: scale = 50000.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: vert_exag = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dh_use_geom = True
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: interp_inherit_geol = True
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: interp_inherit_drill = True
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: show_topo = True
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: show_geol = True
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: show_struct = True
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: show_drillholes = True
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: show_interpretations = True
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: auto_lod = True
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: adaptive_sampling = True
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: max_points = 10000
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-125996470698112 | Settings loaded successfully from Project/Global config
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-125996470698112 | Saved 1 interpretations to project
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125996470698112 | CacheService initialized (Default TTL: 3600s)
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-125996470698112 | ProfileController initialized
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-125996470698112 | Loaded 0 interpretations from project
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: buffer_dist = 100.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dem_band = 1
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: scale = 50000.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: vert_exag = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dh_use_geom = True
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: interp_inherit_geol = True
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: interp_inherit_drill = True
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: show_topo = True
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: show_geol = True
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: show_struct = True
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: show_drillholes = True
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: show_interpretations = True
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: auto_lod = True
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: adaptive_sampling = True
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: max_points = 10000
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-125996470698112 | Settings loaded successfully from Project/Global config
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-125996470698112 | Saved 1 interpretations to project
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-125996470698112 | Saved 0 interpretations to project
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125996470698112 | CacheService initialized (Default TTL: 3600s)
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-125996470698112 | ProfileController initialized
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-125996470698112 | Loaded 0 interpretations from project
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: buffer_dist = 100.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dem_band = 1
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: scale = 50000.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: vert_exag = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dh_use_geom = True
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: interp_inherit_geol = True
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: interp_inherit_drill = True
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: show_topo = True
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: show_geol = True
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: show_struct = True
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: show_drillholes = True
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: show_interpretations = True
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: auto_lod = True
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: adaptive_sampling = True
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: max_points = 10000
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-125996470698112 | Settings loaded successfully from Project/Global config
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-125996470698112 | Loaded 1 interpretations from project
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-125996470698112 | Point 1 added: 0.00, 0.00
2026-01-18 18:02:46 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-125996470698112 | Point 2 added: 10.00, 10.00
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-125996470698112 | finalize_measurement called with 2 points
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-125996470698112 | Setting finalized = True
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-125996470698112 | Measurement finalized: 2 points, 14.14m total distance
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-125996470698112 | Rubber band redrawn with final points only
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-125996470698112 | Switching to pan tool to stop measurement
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-125996470698112 | Pan tool activated - measurement should be frozen
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-125996470698112 | reset() called, finalized=True
2026-01-18 18:02:46 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-125996470698112 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-18 18:02:47 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-125996470698112 | Point 1 added: 0.00, 0.00
2026-01-18 18:02:47 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-125996470698112 | Point 2 added: 100.00, 100.00
2026-01-18 18:02:47 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-125996470698112 | Point 3 added: 200.00, 150.00
2026-01-18 18:02:47 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-125996470698112 | CacheService initialized (Default TTL: 3600s)
2026-01-18 18:02:47 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-125996470698112 | ProfileController initialized
2026-01-18 18:02:47 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-125996470698112 | Loaded 1 interpretations from project
2026-01-18 18:02:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: buffer_dist = 100.0
2026-01-18 18:02:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dem_band = 1
2026-01-18 18:02:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: scale = 50000.0
2026-01-18 18:02:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: vert_exag = 1.0
2026-01-18 18:02:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 18:02:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: dh_use_geom = True
2026-01-18 18:02:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: interp_inherit_geol = True
2026-01-18 18:02:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: interp_inherit_drill = True
2026-01-18 18:02:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: show_topo = True
2026-01-18 18:02:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: show_geol = True
2026-01-18 18:02:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: show_struct = True
2026-01-18 18:02:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: show_drillholes = True
2026-01-18 18:02:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: show_interpretations = True
2026-01-18 18:02:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: auto_lod = True
2026-01-18 18:02:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: adaptive_sampling = True
2026-01-18 18:02:47 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-125996470698112 | Global setting fallback: max_points = 10000
2026-01-18 18:02:47 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-125996470698112 | Settings loaded successfully from Project/Global config
2026-01-18 18:07:54 | DEBUG    | SecInterp | setup_logging:144 | Thread-131906703003776 | Logging system initialized. Root Level: 10
2026-01-18 18:07:54 | DEBUG    | SecInterp | setup_logging:145 | Thread-131906703003776 | File logging path: /app/sec_interp/logs/sec_interp_debug.log
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-131906703003776 | Configuration reset to defaults initiated
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131906703003776 | Config set: SecInterp/scale = 50000.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131906703003776 | Config set: SecInterp/vert_exag = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131906703003776 | Config set: SecInterp/buffer_dist = 100.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131906703003776 | Config set: SecInterp/show_topo = True
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131906703003776 | Config set: SecInterp/show_geol = True
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131906703003776 | Config set: SecInterp/show_struct = True
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131906703003776 | Config set: SecInterp/show_drillholes = True
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131906703003776 | Config set: SecInterp/show_interpretations = True
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131906703003776 | Config set: SecInterp/interp_inherit_geol = True
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131906703003776 | Config set: SecInterp/interp_inherit_drill = True
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131906703003776 | Config set: SecInterp/dh_use_geom = True
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131906703003776 | Config set: SecInterp/auto_lod = False
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131906703003776 | Config set: SecInterp/adaptive_sampling = True
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131906703003776 | Config set: SecInterp/max_points = 10000
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131906703003776 | Config set: SecInterp/dem_band = 1
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131906703003776 | Config set: SecInterp/scale = 200.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131906703003776 | Config set: SecInterp/scale = 20000.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131906703003776 | CacheService initialized (Default TTL: 3600s)
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131906703003776 | CacheService initialized (Default TTL: 3600s)
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131906703003776 | CacheService initialized (Default TTL: 3600s)
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:98 | Thread-131906703003776 | Projecting collars from Test Layer with buffer 50.0m
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:117 | Thread-131906703003776 | No collars found within buffer area.
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:98 | Thread-131906703003776 | Projecting collars from Test Layer with buffer 50.0m
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:138 | Thread-131906703003776 | DrillholeService.project_collars END: Found 1 collars.
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-131906703003776 | ✓ Saving profile axes...
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-131906703003776 | ✓ Saving topographic profile...
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-131906703003776 | ✓ Saving profile axes...
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-131906703003776 | ✓ Saving interpretation data...
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:324 | Thread-131906703003776 | 3D Export features are restricted for this user.
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-131906703003776 | ✓ Saving topographic profile...
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-131906703003776 | ✓ Saving profile axes...
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-131906703003776 | ✓ Saving interpretation data...
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:307 | Thread-131906703003776 | ✓ Saving 3D interpretation data...
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-131906703003776 | ✓ Saving topographic profile...
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-131906703003776 | ✓ Saving profile axes...
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:150 | Thread-131906703003776 | ✓ Saving geological profile...
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:178 | Thread-131906703003776 | ✓ Saving structural profile...
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:221 | Thread-131906703003776 | ✓ Saving drillhole data...
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-131906703003776 | ✓ Saving interpretation data...
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-131906703003776 | Access denied for restricted feature: 3D Export
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:324 | Thread-131906703003776 | 3D Export features are restricted for this user.
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-131906703003776 | ✓ Saving topographic profile...
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-131906703003776 | ✓ Saving profile axes...
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-131906703003776 | No interpretations provided for export.
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:221 | Thread-131906703003776 | ✓ Saving drillhole data...
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:150 | Thread-131906703003776 | ✓ Saving geological profile...
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-131906703003776 | ✓ Saving interpretation data...
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:307 | Thread-131906703003776 | ✓ Saving 3D interpretation data...
2026-01-18 18:07:55 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:322 | Thread-131906703003776 | Invalid section line layer, skipping 3D export.
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-131906703003776 | ✓ Saving interpretation data...
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:178 | Thread-131906703003776 | ✓ Saving structural profile...
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-131906703003776 | ✓ Saving topographic profile...
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:336 | Thread-131906703003776 | Generating master profile with interval=10.00
2026-01-18 18:07:55 | INFO     | SecInterp.performance | measure_operation:244 | Thread-131906703003776 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0068, 'memory_mb': 0.0, 'memory_peak_mb': 0.32, 'timestamp': '2026-01-18 18:07:55', 'args_count': 5, 'kwargs_keys': []}
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:336 | Thread-131906703003776 | Generating master profile with interval=50.00
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:61 | Thread-131906703003776 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:61 | Thread-131906703003776 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-131906703003776 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-131906703003776 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-131906703003776 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-131906703003776 | Running geometry operation: test
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:264 | Thread-131906703003776 | Generated 1 drillhole traces
2026-01-18 18:07:55 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:256 | Thread-131906703003776 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 238, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-18 18:07:55 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:261 | Thread-131906703003776 | Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 238, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 238, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:264 | Thread-131906703003776 | Generated 1 drillhole traces
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:177 | Thread-131906703003776 | Drillhole preview skipped: No Collar ID field selected.
2026-01-18 18:07:55 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-131906703003776 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 18:07:55 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-131906703003776 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 18:07:55 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:196 | Thread-131906703003776 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 191, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 18:07:55 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:321 | Thread-131906703003776 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 314, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 191, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 18:07:55 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:156 | Thread-131906703003776 | Buffer creation failed
Traceback (most recent call last):
  File "/app/sec_interp/core/services/structure_service.py", line 154, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-131906703003776 | Analyzing structures in Structure Layer with buffer 10m
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:128 | Thread-131906703003776 | Processed 1 structural measurements from Structure Layer
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:149 | Thread-131906703003776 | Successfully exported to /tmp/test_dynamic.shp
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-131906703003776 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:135 | Thread-131906703003776 | Generated QML style: /tmp/test.qml
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-131906703003776 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:135 | Thread-131906703003776 | Generated QML style: dummy.qml
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-131906703003776 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:135 | Thread-131906703003776 | Generated QML style: dummy.qml
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:59 | Thread-131906703003776 | Loaded 0 interpretations from project
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:234 | Thread-131906703003776 | Inherited attributes from geology: GeologyUnit
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:59 | Thread-131906703003776 | Loaded 0 interpretations from project
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: section_layer = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: section_layer_name = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:453 | Thread-131906703003776 | Failed to restore layer for section_layer
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: buffer_dist = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dem_layer = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dem_layer_name = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:453 | Thread-131906703003776 | Failed to restore layer for dem_layer
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dem_band = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: scale = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: vert_exag = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: geol_layer = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: geol_layer_name = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:453 | Thread-131906703003776 | Failed to restore layer for geol_layer
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: geol_field = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: struct_layer = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: struct_layer_name = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:453 | Thread-131906703003776 | Failed to restore layer for struct_layer
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: struct_dip_field = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: struct_strike_field = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dh_collar_layer = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:453 | Thread-131906703003776 | Failed to restore layer for dh_collar_layer
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dh_collar_id = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dh_use_geom = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dh_collar_x = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dh_collar_y = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dh_collar_z = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dh_collar_depth = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dh_survey_layer = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:453 | Thread-131906703003776 | Failed to restore layer for dh_survey_layer
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dh_survey_id = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dh_survey_depth = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dh_survey_azim = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dh_survey_incl = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dh_interval_layer = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:453 | Thread-131906703003776 | Failed to restore layer for dh_interval_layer
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dh_interval_id = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dh_interval_from = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dh_interval_to = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dh_interval_lith = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: last_output_dir = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: interp_custom_fields = 1.0
2026-01-18 18:07:55 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:172 | Thread-131906703003776 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: show_topo = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: show_geol = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: show_struct = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: show_drillholes = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: show_interpretations = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: auto_lod = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: adaptive_sampling = 1.0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: max_points = 1.0
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-131906703003776 | Settings loaded successfully from Project/Global config
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.gui.main_dialog_cache_handler | clear_cache:25 | Thread-131906703003776 | Cache cleared by user
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-131906703003776 | GeologyGenerationTask started (Background Thread)
2026-01-18 18:07:55 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:63 | Thread-131906703003776 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/app/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-131906703003776 | GeologyGenerationTask started (Background Thread)
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-131906703003776 | GeologyGenerationTask finished with 1 segments
2026-01-18 18:07:55 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-131906703003776 | Test Title: Test Message
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-131906703003776 | Test Title: Test Message
2026-01-18 18:07:55 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-131906703003776 | Test Title: Test Message
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-131906703003776 | CRITICAL_OP: finalize_polygon | points=2
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-131906703003776 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-18 18:07:55 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-131906703003776 | finalize_polygon() aborted - less than 3 points
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-131906703003776 | CRITICAL_OP: finalize_polygon | points=3
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-131906703003776 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:333 | Thread-131906703003776 | finalize_polygon() - emitting polygonFinished signal for c1df1c0f-c907-4087-92b6-e8e43f85dafa
2026-01-18 18:07:55 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:339 | Thread-131906703003776 | Interpretation polygon finalized with 3 vertices, ID: c1df1c0f-c907-4087-92b6-e8e43f85dafa
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:342 | Thread-131906703003776 | finalize_polygon() completed
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-131906703003776 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-131906703003776 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-131906703003776 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-131906703003776 | ProfileInterpretationTool.reset() completed
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-131906703003776 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-131906703003776 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-131906703003776 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-131906703003776 | ProfileInterpretationTool.reset() completed
2026-01-18 18:07:55 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:111 | Thread-131906703003776 | Failed to create locator for layer layer1: mock error
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:142 | Thread-131906703003776 | ProfileInterpretationTool.activate() called
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:145 | Thread-131906703003776 | ProfileInterpretationTool activated successfully
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:150 | Thread-131906703003776 | ProfileInterpretationTool.deactivate() called
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-131906703003776 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-131906703003776 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-131906703003776 | ProfileInterpretationTool.reset() completed
2026-01-18 18:07:55 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:153 | Thread-131906703003776 | ProfileInterpretationTool deactivated successfully
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:234 | Thread-131906703003776 | Inherited attributes from geology: Limestone
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:59 | Thread-131906703003776 | Loaded 0 interpretations from project
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:59 | Thread-131906703003776 | Loaded 1 interpretations from project
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:94 | Thread-131906703003776 | Saved 1 interpretations to project
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: buffer_dist = 100.5
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:353 | Thread-131906703003776 | Persistent interpretations cleared by reset
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:358 | Thread-131906703003776 | Dialog reset to defaults by user
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:410 | Thread-131906703003776 | Setting saved to project: test_layer = id_123
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:410 | Thread-131906703003776 | Setting saved to project: test_layer_name = RealName
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: test_layer = 1.0
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:390 | Thread-131906703003776 | Project setting hit: test_layer_name = RealName
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:447 | Thread-131906703003776 | Restoring layer: test_layer -> RealName
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-131906703003776 | Point 1 added: 0.00, 0.00
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-131906703003776 | Point 2 added: 100.00, 100.00
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-131906703003776 | Point 1 added: 50.00, 50.00
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-131906703003776 | reset() called, finalized=False
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-131906703003776 | finalize_measurement called with 1 points
2026-01-18 18:07:56 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:275 | Thread-131906703003776 | Cannot finalize measurement with less than 2 points
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-131906703003776 | finalize_measurement called with 2 points
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-131906703003776 | Setting finalized = True
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-131906703003776 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-131906703003776 | Switching to pan tool to stop measurement
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-131906703003776 | Pan tool activated - measurement should be frozen
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:202 | Thread-131906703003776 | Ignoring click - measurement is finalized
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-131906703003776 | finalize_measurement called with 2 points
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-131906703003776 | Setting finalized = True
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-131906703003776 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-131906703003776 | Switching to pan tool to stop measurement
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-131906703003776 | Pan tool activated - measurement should be frozen
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-131906703003776 | reset() called, finalized=False
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-131906703003776 | reset() called, finalized=False
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-131906703003776 | reset() called, finalized=True
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:159 | Thread-131906703003776 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-131906703003776 | reset() called, finalized=False
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-131906703003776 | finalize_measurement called with 2 points
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-131906703003776 | Setting finalized = True
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-131906703003776 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:298 | Thread-131906703003776 | Rubber band redrawn with final points only
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-131906703003776 | Switching to pan tool to stop measurement
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-131906703003776 | Pan tool activated - measurement should be frozen
2026-01-18 18:07:56 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:103 | Thread-131906703003776 | Failed to create locator for layer layer1: mock error
2026-01-18 18:07:56 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:103 | Thread-131906703003776 | Failed to create locator for layer l2: fail
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:141 | Thread-131906703003776 | ProfileMeasureTool activated
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-131906703003776 | reset() called, finalized=False
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:147 | Thread-131906703003776 | ProfileMeasureTool deactivated
2026-01-18 18:07:56 | WARNING  | SecInterp.sec_interp.gui.main_dialog_messages | handle_error:67 | Thread-131906703003776 | App Error: Validation failed - Details: Check inputs
2026-01-18 18:07:56 | ERROR    | SecInterp.sec_interp.gui.main_dialog_messages | handle_error:74 | Thread-131906703003776 | System Error: An unexpected error occurred: Something went wrong
Stack trace details
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-131906703003776 | create_drillhole_trace_layer called with 1 holes
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:393 | Thread-131906703003776 | Adding 1 drillhole trace features to layer
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-131906703003776 | create_drillhole_trace_layer called with 1 holes
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:393 | Thread-131906703003776 | Adding 1 drillhole trace features to layer
2026-01-18 18:07:56 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-131906703003776 | Failed to create memory layer: Fail
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-131906703003776 | create_drillhole_trace_layer called with 0 holes
2026-01-18 18:07:56 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-131906703003776 | No drillhole data provided for trace layer
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-131906703003776 | create_drillhole_trace_layer called with 1 holes
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:380 | Thread-131906703003776 | Skipping hole H1: insufficient trace points (1)
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:393 | Thread-131906703003776 | Adding 0 drillhole trace features to layer
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-131906703003776 | create_drillhole_trace_layer called with 1 holes
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131906703003776 | render() called
2026-01-18 18:07:56 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:156 | Thread-131906703003776 | No valid layers to render
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131906703003776 | render() called
2026-01-18 18:07:56 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:221 | Thread-131906703003776 | Error exporting preview
Traceback (most recent call last):
  File "/app/sec_interp/gui/preview_renderer.py", line 198, in export_to_image
    settings = QgsMapSettings()
               ^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131906703003776 | render() called
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131906703003776 | render() called
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131906703003776 | render() called
2026-01-18 18:07:56 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:156 | Thread-131906703003776 | No valid layers to render
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131906703003776 | render() called
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131906703003776 | render() called
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-131906703003776 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-131906703003776 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131906703003776 | CacheService initialized (Default TTL: 3600s)
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-131906703003776 | ProfileController initialized
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:59 | Thread-131906703003776 | Loaded 0 interpretations from project
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: buffer_dist = 100.0
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dem_band = 1
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: scale = 50000.0
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: vert_exag = 1.0
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dh_use_geom = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: interp_inherit_geol = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: interp_inherit_drill = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: show_topo = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: show_geol = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: show_struct = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: show_drillholes = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: show_interpretations = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: auto_lod = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: adaptive_sampling = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: max_points = 10000
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-131906703003776 | Settings loaded successfully from Project/Global config
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:94 | Thread-131906703003776 | Saved 1 interpretations to project
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131906703003776 | CacheService initialized (Default TTL: 3600s)
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-131906703003776 | ProfileController initialized
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:59 | Thread-131906703003776 | Loaded 0 interpretations from project
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: buffer_dist = 100.0
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dem_band = 1
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: scale = 50000.0
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: vert_exag = 1.0
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dh_use_geom = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: interp_inherit_geol = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: interp_inherit_drill = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: show_topo = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: show_geol = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: show_struct = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: show_drillholes = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: show_interpretations = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: auto_lod = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: adaptive_sampling = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: max_points = 10000
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-131906703003776 | Settings loaded successfully from Project/Global config
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:94 | Thread-131906703003776 | Saved 1 interpretations to project
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:94 | Thread-131906703003776 | Saved 0 interpretations to project
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131906703003776 | CacheService initialized (Default TTL: 3600s)
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-131906703003776 | ProfileController initialized
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:59 | Thread-131906703003776 | Loaded 0 interpretations from project
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: buffer_dist = 100.0
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dem_band = 1
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: scale = 50000.0
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: vert_exag = 1.0
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dh_use_geom = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: interp_inherit_geol = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: interp_inherit_drill = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: show_topo = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: show_geol = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: show_struct = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: show_drillholes = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: show_interpretations = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: auto_lod = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: adaptive_sampling = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: max_points = 10000
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-131906703003776 | Settings loaded successfully from Project/Global config
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:59 | Thread-131906703003776 | Loaded 1 interpretations from project
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-131906703003776 | Point 1 added: 0.00, 0.00
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-131906703003776 | Point 2 added: 10.00, 10.00
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-131906703003776 | finalize_measurement called with 2 points
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-131906703003776 | Setting finalized = True
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-131906703003776 | Measurement finalized: 2 points, 14.14m total distance
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:298 | Thread-131906703003776 | Rubber band redrawn with final points only
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-131906703003776 | Switching to pan tool to stop measurement
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-131906703003776 | Pan tool activated - measurement should be frozen
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-131906703003776 | reset() called, finalized=True
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:159 | Thread-131906703003776 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-131906703003776 | Point 1 added: 0.00, 0.00
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-131906703003776 | Point 2 added: 100.00, 100.00
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-131906703003776 | Point 3 added: 200.00, 150.00
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131906703003776 | CacheService initialized (Default TTL: 3600s)
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-131906703003776 | ProfileController initialized
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:59 | Thread-131906703003776 | Loaded 1 interpretations from project
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: buffer_dist = 100.0
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dem_band = 1
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: scale = 50000.0
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: vert_exag = 1.0
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: dh_use_geom = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: interp_inherit_geol = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: interp_inherit_drill = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: show_topo = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: show_geol = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: show_struct = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: show_drillholes = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: show_interpretations = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: auto_lod = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: adaptive_sampling = True
2026-01-18 18:07:56 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131906703003776 | Global setting fallback: max_points = 10000
2026-01-18 18:07:56 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-131906703003776 | Settings loaded successfully from Project/Global config
2026-01-18 18:53:39 | DEBUG    | SecInterp | setup_logging:142 | Thread-136592307028096 | Logging system initialized. Root Level: 10
2026-01-18 18:53:39 | DEBUG    | SecInterp | setup_logging:143 | Thread-136592307028096 | File logging path: /app/sec_interp/logs/sec_interp_debug.log
2026-01-18 18:53:39 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-136592307028096 | Configuration reset to defaults initiated
2026-01-18 18:53:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136592307028096 | Config set: SecInterp/scale = 50000.0
2026-01-18 18:53:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136592307028096 | Config set: SecInterp/vert_exag = 1.0
2026-01-18 18:53:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136592307028096 | Config set: SecInterp/buffer_dist = 100.0
2026-01-18 18:53:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136592307028096 | Config set: SecInterp/show_topo = True
2026-01-18 18:53:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136592307028096 | Config set: SecInterp/show_geol = True
2026-01-18 18:53:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136592307028096 | Config set: SecInterp/show_struct = True
2026-01-18 18:53:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136592307028096 | Config set: SecInterp/show_drillholes = True
2026-01-18 18:53:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136592307028096 | Config set: SecInterp/show_interpretations = True
2026-01-18 18:53:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136592307028096 | Config set: SecInterp/interp_inherit_geol = True
2026-01-18 18:53:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136592307028096 | Config set: SecInterp/interp_inherit_drill = True
2026-01-18 18:53:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136592307028096 | Config set: SecInterp/dh_use_geom = True
2026-01-18 18:53:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136592307028096 | Config set: SecInterp/auto_lod = False
2026-01-18 18:53:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136592307028096 | Config set: SecInterp/adaptive_sampling = True
2026-01-18 18:53:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136592307028096 | Config set: SecInterp/max_points = 10000
2026-01-18 18:53:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136592307028096 | Config set: SecInterp/dem_band = 1
2026-01-18 18:53:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136592307028096 | Config set: SecInterp/scale = 200.0
2026-01-18 18:53:39 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-136592307028096 | Config set: SecInterp/scale = 20000.0
2026-01-18 18:53:39 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-136592307028096 | CacheService initialized (Default TTL: 3600s)
2026-01-18 18:53:39 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-136592307028096 | CacheService initialized (Default TTL: 3600s)
2026-01-18 18:53:39 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-136592307028096 | CacheService initialized (Default TTL: 3600s)
2026-01-18 18:53:39 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-136592307028096 | Projecting collars from Test Layer with buffer 50.0m
2026-01-18 18:53:39 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:106 | Thread-136592307028096 | No collars found within buffer area.
2026-01-18 18:53:39 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-136592307028096 | Projecting collars from Test Layer with buffer 50.0m
2026-01-18 18:53:39 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:127 | Thread-136592307028096 | DrillholeService.project_collars END: Found 1 collars.
2026-01-18 18:53:39 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-136592307028096 | ✓ Saving profile axes...
2026-01-18 18:53:39 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-136592307028096 | ✓ Saving topographic profile...
2026-01-18 18:53:39 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-136592307028096 | ✓ Saving profile axes...
2026-01-18 18:53:39 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-136592307028096 | ✓ Saving interpretation data...
2026-01-18 18:53:39 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-136592307028096 | 3D Export features are restricted for this user.
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-136592307028096 | ✓ Saving topographic profile...
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-136592307028096 | ✓ Saving profile axes...
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-136592307028096 | ✓ Saving interpretation data...
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-136592307028096 | ✓ Saving 3D interpretation data...
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-136592307028096 | ✓ Saving topographic profile...
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-136592307028096 | ✓ Saving profile axes...
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-136592307028096 | ✓ Saving geological profile...
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-136592307028096 | ✓ Saving structural profile...
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-136592307028096 | ✓ Saving drillhole data...
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-136592307028096 | ✓ Saving interpretation data...
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-136592307028096 | Access denied for restricted feature: 3D Export
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-136592307028096 | 3D Export features are restricted for this user.
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-136592307028096 | ✓ Saving topographic profile...
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-136592307028096 | ✓ Saving profile axes...
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-136592307028096 | No interpretations provided for export.
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-136592307028096 | ✓ Saving drillhole data...
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-136592307028096 | ✓ Saving geological profile...
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-136592307028096 | ✓ Saving interpretation data...
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-136592307028096 | ✓ Saving 3D interpretation data...
2026-01-18 18:53:40 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-136592307028096 | Invalid section line layer, skipping 3D export.
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-136592307028096 | ✓ Saving interpretation data...
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-136592307028096 | ✓ Saving structural profile...
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-136592307028096 | ✓ Saving topographic profile...
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-136592307028096 | Generating master profile with interval=10.00
2026-01-18 18:53:40 | INFO     | SecInterp.performance | measure_operation:244 | Thread-136592307028096 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0074, 'memory_mb': 0.0, 'memory_peak_mb': 0.32, 'timestamp': '2026-01-18 18:53:40', 'args_count': 5, 'kwargs_keys': []}
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-136592307028096 | Generating master profile with interval=50.00
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-136592307028096 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-136592307028096 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-136592307028096 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-136592307028096 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-136592307028096 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-136592307028096 | Running geometry operation: test
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-136592307028096 | Generated 1 drillhole traces
2026-01-18 18:53:40 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-136592307028096 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-18 18:53:40 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:251 | Thread-136592307028096 | Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-136592307028096 | Generated 1 drillhole traces
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:171 | Thread-136592307028096 | Drillhole preview skipped: No Collar ID field selected.
2026-01-18 18:53:40 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-136592307028096 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 18:53:40 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-136592307028096 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 18:53:40 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-136592307028096 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 18:53:40 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-136592307028096 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 18:53:40 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-136592307028096 | Buffer creation failed
Traceback (most recent call last):
  File "/app/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-136592307028096 | Analyzing structures in Structure Layer with buffer 10m
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-136592307028096 | Processed 1 structural measurements from Structure Layer
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-136592307028096 | Successfully exported to /tmp/test_dynamic.shp
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-136592307028096 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-136592307028096 | Generated QML style: /tmp/test.qml
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-136592307028096 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-136592307028096 | Generated QML style: dummy.qml
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-136592307028096 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-136592307028096 | Generated QML style: dummy.qml
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-136592307028096 | Loaded 0 interpretations from project
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:224 | Thread-136592307028096 | Inherited attributes from geology: GeologyUnit
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-136592307028096 | Loaded 0 interpretations from project
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: section_layer = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: section_layer_name = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-136592307028096 | Failed to restore layer for section_layer
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: buffer_dist = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dem_layer = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dem_layer_name = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-136592307028096 | Failed to restore layer for dem_layer
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dem_band = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: scale = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: vert_exag = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: geol_layer = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: geol_layer_name = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-136592307028096 | Failed to restore layer for geol_layer
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: geol_field = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: struct_layer = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: struct_layer_name = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-136592307028096 | Failed to restore layer for struct_layer
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: struct_dip_field = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: struct_strike_field = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dh_collar_layer = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-136592307028096 | Failed to restore layer for dh_collar_layer
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dh_collar_id = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dh_use_geom = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dh_collar_x = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dh_collar_y = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dh_collar_z = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dh_collar_depth = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dh_survey_layer = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-136592307028096 | Failed to restore layer for dh_survey_layer
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dh_survey_id = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dh_survey_depth = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dh_survey_azim = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dh_survey_incl = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dh_interval_layer = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-136592307028096 | Failed to restore layer for dh_interval_layer
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dh_interval_id = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dh_interval_from = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dh_interval_to = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dh_interval_lith = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: last_output_dir = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: interp_custom_fields = 1.0
2026-01-18 18:53:40 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-136592307028096 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: show_topo = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: show_geol = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: show_struct = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: show_drillholes = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: show_interpretations = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: auto_lod = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: adaptive_sampling = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: max_points = 1.0
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-136592307028096 | Settings loaded successfully from Project/Global config
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.main_dialog_cache_handler | clear_cache:25 | Thread-136592307028096 | Cache cleared by user
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-136592307028096 | GeologyGenerationTask started (Background Thread)
2026-01-18 18:53:40 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-136592307028096 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/app/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-136592307028096 | GeologyGenerationTask started (Background Thread)
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-136592307028096 | GeologyGenerationTask finished with 1 segments
2026-01-18 18:53:40 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-136592307028096 | Test Title: Test Message
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-136592307028096 | Test Title: Test Message
2026-01-18 18:53:40 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-136592307028096 | Test Title: Test Message
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-136592307028096 | CRITICAL_OP: finalize_polygon | points=2
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-136592307028096 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-18 18:53:40 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-136592307028096 | finalize_polygon() aborted - less than 3 points
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-136592307028096 | CRITICAL_OP: finalize_polygon | points=3
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-136592307028096 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-136592307028096 | finalize_polygon() - emitting polygonFinished signal for cf6439ca-7bdd-4d7d-87e6-106accb7ee47
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-136592307028096 | Interpretation polygon finalized with 3 vertices, ID: cf6439ca-7bdd-4d7d-87e6-106accb7ee47
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-136592307028096 | finalize_polygon() completed
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-136592307028096 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-136592307028096 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-136592307028096 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-136592307028096 | ProfileInterpretationTool.reset() completed
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-136592307028096 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-136592307028096 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-136592307028096 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-136592307028096 | ProfileInterpretationTool.reset() completed
2026-01-18 18:53:40 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-136592307028096 | Failed to create locator for layer layer1: mock error
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-136592307028096 | ProfileInterpretationTool.activate() called
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-136592307028096 | ProfileInterpretationTool activated successfully
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-136592307028096 | ProfileInterpretationTool.deactivate() called
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-136592307028096 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-136592307028096 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-136592307028096 | ProfileInterpretationTool.reset() completed
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-136592307028096 | ProfileInterpretationTool deactivated successfully
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:224 | Thread-136592307028096 | Inherited attributes from geology: Limestone
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-136592307028096 | Loaded 0 interpretations from project
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-136592307028096 | Loaded 1 interpretations from project
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-136592307028096 | Saved 1 interpretations to project
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: buffer_dist = 100.5
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-136592307028096 | Persistent interpretations cleared by reset
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:348 | Thread-136592307028096 | Dialog reset to defaults by user
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:400 | Thread-136592307028096 | Setting saved to project: test_layer = id_123
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:400 | Thread-136592307028096 | Setting saved to project: test_layer_name = RealName
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: test_layer = 1.0
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:380 | Thread-136592307028096 | Project setting hit: test_layer_name = RealName
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:437 | Thread-136592307028096 | Restoring layer: test_layer -> RealName
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-136592307028096 | Point 1 added: 0.00, 0.00
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-136592307028096 | Point 2 added: 100.00, 100.00
2026-01-18 18:53:40 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-136592307028096 | Point 1 added: 50.00, 50.00
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-136592307028096 | reset() called, finalized=False
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-136592307028096 | finalize_measurement called with 1 points
2026-01-18 18:53:40 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-136592307028096 | Cannot finalize measurement with less than 2 points
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-136592307028096 | finalize_measurement called with 2 points
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-136592307028096 | Setting finalized = True
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-136592307028096 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-136592307028096 | Switching to pan tool to stop measurement
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-136592307028096 | Pan tool activated - measurement should be frozen
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-136592307028096 | Ignoring click - measurement is finalized
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-136592307028096 | finalize_measurement called with 2 points
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-136592307028096 | Setting finalized = True
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-136592307028096 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-136592307028096 | Switching to pan tool to stop measurement
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-136592307028096 | Pan tool activated - measurement should be frozen
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-136592307028096 | reset() called, finalized=False
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-136592307028096 | reset() called, finalized=False
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-136592307028096 | reset() called, finalized=True
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-136592307028096 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-136592307028096 | reset() called, finalized=False
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-136592307028096 | finalize_measurement called with 2 points
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-136592307028096 | Setting finalized = True
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-136592307028096 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-136592307028096 | Rubber band redrawn with final points only
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-136592307028096 | Switching to pan tool to stop measurement
2026-01-18 18:53:40 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-136592307028096 | Pan tool activated - measurement should be frozen
2026-01-18 18:53:40 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-136592307028096 | Failed to create locator for layer layer1: mock error
2026-01-18 18:53:40 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-136592307028096 | Failed to create locator for layer l2: fail
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-136592307028096 | ProfileMeasureTool activated
2026-01-18 18:53:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-136592307028096 | reset() called, finalized=False
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-136592307028096 | ProfileMeasureTool deactivated
2026-01-18 18:53:41 | WARNING  | SecInterp.sec_interp.gui.main_dialog_messages | handle_error:63 | Thread-136592307028096 | App Error: Validation failed - Details: Check inputs
2026-01-18 18:53:41 | ERROR    | SecInterp.sec_interp.gui.main_dialog_messages | handle_error:68 | Thread-136592307028096 | System Error: An unexpected error occurred: Something went wrong
Stack trace details
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-136592307028096 | create_drillhole_trace_layer called with 1 holes
2026-01-18 18:53:41 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-136592307028096 | Adding 1 drillhole trace features to layer
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-136592307028096 | create_drillhole_trace_layer called with 1 holes
2026-01-18 18:53:41 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-136592307028096 | Adding 1 drillhole trace features to layer
2026-01-18 18:53:41 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-136592307028096 | Failed to create memory layer: Fail
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-136592307028096 | create_drillhole_trace_layer called with 0 holes
2026-01-18 18:53:41 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-136592307028096 | No drillhole data provided for trace layer
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-136592307028096 | create_drillhole_trace_layer called with 1 holes
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-136592307028096 | Skipping hole H1: insufficient trace points (1)
2026-01-18 18:53:41 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-136592307028096 | Adding 0 drillhole trace features to layer
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-136592307028096 | create_drillhole_trace_layer called with 1 holes
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136592307028096 | render() called
2026-01-18 18:53:41 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-136592307028096 | No valid layers to render
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136592307028096 | render() called
2026-01-18 18:53:41 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-136592307028096 | Error exporting preview
Traceback (most recent call last):
  File "/app/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
               ^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136592307028096 | render() called
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136592307028096 | render() called
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136592307028096 | render() called
2026-01-18 18:53:41 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-136592307028096 | No valid layers to render
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136592307028096 | render() called
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-136592307028096 | render() called
2026-01-18 18:53:41 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-136592307028096 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-18 18:53:41 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-136592307028096 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-136592307028096 | CacheService initialized (Default TTL: 3600s)
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-136592307028096 | ProfileController initialized
2026-01-18 18:53:41 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-136592307028096 | Loaded 0 interpretations from project
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: buffer_dist = 100.0
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dem_band = 1
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: scale = 50000.0
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: vert_exag = 1.0
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dh_use_geom = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: interp_inherit_geol = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: interp_inherit_drill = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: show_topo = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: show_geol = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: show_struct = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: show_drillholes = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: show_interpretations = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: auto_lod = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: adaptive_sampling = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: max_points = 10000
2026-01-18 18:53:41 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-136592307028096 | Settings loaded successfully from Project/Global config
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-136592307028096 | Saved 1 interpretations to project
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-136592307028096 | CacheService initialized (Default TTL: 3600s)
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-136592307028096 | ProfileController initialized
2026-01-18 18:53:41 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-136592307028096 | Loaded 0 interpretations from project
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: buffer_dist = 100.0
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dem_band = 1
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: scale = 50000.0
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: vert_exag = 1.0
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dh_use_geom = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: interp_inherit_geol = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: interp_inherit_drill = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: show_topo = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: show_geol = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: show_struct = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: show_drillholes = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: show_interpretations = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: auto_lod = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: adaptive_sampling = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: max_points = 10000
2026-01-18 18:53:41 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-136592307028096 | Settings loaded successfully from Project/Global config
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-136592307028096 | Saved 1 interpretations to project
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-136592307028096 | Saved 0 interpretations to project
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-136592307028096 | CacheService initialized (Default TTL: 3600s)
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-136592307028096 | ProfileController initialized
2026-01-18 18:53:41 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-136592307028096 | Loaded 0 interpretations from project
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: buffer_dist = 100.0
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dem_band = 1
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: scale = 50000.0
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: vert_exag = 1.0
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dh_use_geom = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: interp_inherit_geol = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: interp_inherit_drill = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: show_topo = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: show_geol = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: show_struct = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: show_drillholes = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: show_interpretations = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: auto_lod = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: adaptive_sampling = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: max_points = 10000
2026-01-18 18:53:41 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-136592307028096 | Settings loaded successfully from Project/Global config
2026-01-18 18:53:41 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-136592307028096 | Loaded 1 interpretations from project
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-136592307028096 | Point 1 added: 0.00, 0.00
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-136592307028096 | Point 2 added: 10.00, 10.00
2026-01-18 18:53:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-136592307028096 | finalize_measurement called with 2 points
2026-01-18 18:53:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-136592307028096 | Setting finalized = True
2026-01-18 18:53:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-136592307028096 | Measurement finalized: 2 points, 14.14m total distance
2026-01-18 18:53:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-136592307028096 | Rubber band redrawn with final points only
2026-01-18 18:53:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-136592307028096 | Switching to pan tool to stop measurement
2026-01-18 18:53:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-136592307028096 | Pan tool activated - measurement should be frozen
2026-01-18 18:53:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-136592307028096 | reset() called, finalized=True
2026-01-18 18:53:41 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-136592307028096 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-136592307028096 | Point 1 added: 0.00, 0.00
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-136592307028096 | Point 2 added: 100.00, 100.00
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-136592307028096 | Point 3 added: 200.00, 150.00
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-136592307028096 | CacheService initialized (Default TTL: 3600s)
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-136592307028096 | ProfileController initialized
2026-01-18 18:53:41 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-136592307028096 | Loaded 1 interpretations from project
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: buffer_dist = 100.0
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dem_band = 1
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: scale = 50000.0
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: vert_exag = 1.0
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: dh_use_geom = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: interp_inherit_geol = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: interp_inherit_drill = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: show_topo = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: show_geol = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: show_struct = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: show_drillholes = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: show_interpretations = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: auto_lod = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: adaptive_sampling = True
2026-01-18 18:53:41 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-136592307028096 | Global setting fallback: max_points = 10000
2026-01-18 18:53:41 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-136592307028096 | Settings loaded successfully from Project/Global config
2026-01-18 19:16:52 | DEBUG    | SecInterp | setup_logging:144 | Thread-127637006819456 | Logging system initialized. Root Level: 10
2026-01-18 19:16:52 | DEBUG    | SecInterp | setup_logging:145 | Thread-127637006819456 | File logging path: /app/sec_interp/logs/sec_interp_debug.log
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-127637006819456 | Configuration reset to defaults initiated
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127637006819456 | Config set: SecInterp/scale = 50000.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127637006819456 | Config set: SecInterp/vert_exag = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127637006819456 | Config set: SecInterp/buffer_dist = 100.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127637006819456 | Config set: SecInterp/show_topo = True
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127637006819456 | Config set: SecInterp/show_geol = True
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127637006819456 | Config set: SecInterp/show_struct = True
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127637006819456 | Config set: SecInterp/show_drillholes = True
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127637006819456 | Config set: SecInterp/show_interpretations = True
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127637006819456 | Config set: SecInterp/interp_inherit_geol = True
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127637006819456 | Config set: SecInterp/interp_inherit_drill = True
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127637006819456 | Config set: SecInterp/dh_use_geom = True
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127637006819456 | Config set: SecInterp/auto_lod = False
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127637006819456 | Config set: SecInterp/adaptive_sampling = True
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127637006819456 | Config set: SecInterp/max_points = 10000
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127637006819456 | Config set: SecInterp/dem_band = 1
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127637006819456 | Config set: SecInterp/scale = 200.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-127637006819456 | Config set: SecInterp/scale = 20000.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-127637006819456 | CacheService initialized (Default TTL: 3600s)
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-127637006819456 | CacheService initialized (Default TTL: 3600s)
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-127637006819456 | CacheService initialized (Default TTL: 3600s)
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:98 | Thread-127637006819456 | Projecting collars from Test Layer with buffer 50.0m
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:117 | Thread-127637006819456 | No collars found within buffer area.
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:98 | Thread-127637006819456 | Projecting collars from Test Layer with buffer 50.0m
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:138 | Thread-127637006819456 | DrillholeService.project_collars END: Found 1 collars.
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-127637006819456 | ✓ Saving profile axes...
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-127637006819456 | ✓ Saving topographic profile...
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-127637006819456 | ✓ Saving profile axes...
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-127637006819456 | ✓ Saving interpretation data...
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:324 | Thread-127637006819456 | 3D Export features are restricted for this user.
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-127637006819456 | ✓ Saving topographic profile...
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-127637006819456 | ✓ Saving profile axes...
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-127637006819456 | ✓ Saving interpretation data...
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:307 | Thread-127637006819456 | ✓ Saving 3D interpretation data...
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-127637006819456 | ✓ Saving topographic profile...
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-127637006819456 | ✓ Saving profile axes...
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:150 | Thread-127637006819456 | ✓ Saving geological profile...
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:178 | Thread-127637006819456 | ✓ Saving structural profile...
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:221 | Thread-127637006819456 | ✓ Saving drillhole data...
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-127637006819456 | ✓ Saving interpretation data...
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-127637006819456 | Access denied for restricted feature: 3D Export
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:324 | Thread-127637006819456 | 3D Export features are restricted for this user.
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-127637006819456 | ✓ Saving topographic profile...
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-127637006819456 | ✓ Saving profile axes...
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-127637006819456 | No interpretations provided for export.
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:221 | Thread-127637006819456 | ✓ Saving drillhole data...
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:150 | Thread-127637006819456 | ✓ Saving geological profile...
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-127637006819456 | ✓ Saving interpretation data...
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:307 | Thread-127637006819456 | ✓ Saving 3D interpretation data...
2026-01-18 19:16:53 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:322 | Thread-127637006819456 | Invalid section line layer, skipping 3D export.
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-127637006819456 | ✓ Saving interpretation data...
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:178 | Thread-127637006819456 | ✓ Saving structural profile...
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-127637006819456 | ✓ Saving topographic profile...
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:336 | Thread-127637006819456 | Generating master profile with interval=10.00
2026-01-18 19:16:53 | INFO     | SecInterp.performance | measure_operation:244 | Thread-127637006819456 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0074, 'memory_mb': 0.0, 'memory_peak_mb': 0.32, 'timestamp': '2026-01-18 19:16:53', 'args_count': 5, 'kwargs_keys': []}
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:336 | Thread-127637006819456 | Generating master profile with interval=50.00
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:61 | Thread-127637006819456 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:61 | Thread-127637006819456 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-127637006819456 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-127637006819456 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-127637006819456 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-127637006819456 | Running geometry operation: test
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:264 | Thread-127637006819456 | Generated 1 drillhole traces
2026-01-18 19:16:53 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:256 | Thread-127637006819456 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 238, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-18 19:16:53 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:261 | Thread-127637006819456 | Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 238, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 238, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:264 | Thread-127637006819456 | Generated 1 drillhole traces
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:177 | Thread-127637006819456 | Drillhole preview skipped: No Collar ID field selected.
2026-01-18 19:16:53 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-127637006819456 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 19:16:53 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-127637006819456 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 19:16:53 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:196 | Thread-127637006819456 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 191, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 19:16:53 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:321 | Thread-127637006819456 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 314, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 191, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 19:16:53 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:156 | Thread-127637006819456 | Buffer creation failed
Traceback (most recent call last):
  File "/app/sec_interp/core/services/structure_service.py", line 154, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-127637006819456 | Analyzing structures in Structure Layer with buffer 10m
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:128 | Thread-127637006819456 | Processed 1 structural measurements from Structure Layer
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:149 | Thread-127637006819456 | Successfully exported to /tmp/test_dynamic.shp
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-127637006819456 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:135 | Thread-127637006819456 | Generated QML style: /tmp/test.qml
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-127637006819456 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:135 | Thread-127637006819456 | Generated QML style: dummy.qml
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-127637006819456 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:135 | Thread-127637006819456 | Generated QML style: dummy.qml
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:59 | Thread-127637006819456 | Loaded 0 interpretations from project
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:234 | Thread-127637006819456 | Inherited attributes from geology: GeologyUnit
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:59 | Thread-127637006819456 | Loaded 0 interpretations from project
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: section_layer = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: section_layer_name = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:453 | Thread-127637006819456 | Failed to restore layer for section_layer
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: buffer_dist = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dem_layer = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dem_layer_name = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:453 | Thread-127637006819456 | Failed to restore layer for dem_layer
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dem_band = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: scale = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: vert_exag = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: geol_layer = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: geol_layer_name = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:453 | Thread-127637006819456 | Failed to restore layer for geol_layer
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: geol_field = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: struct_layer = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: struct_layer_name = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:453 | Thread-127637006819456 | Failed to restore layer for struct_layer
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: struct_dip_field = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: struct_strike_field = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dh_collar_layer = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:453 | Thread-127637006819456 | Failed to restore layer for dh_collar_layer
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dh_collar_id = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dh_use_geom = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dh_collar_x = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dh_collar_y = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dh_collar_z = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dh_collar_depth = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dh_survey_layer = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:453 | Thread-127637006819456 | Failed to restore layer for dh_survey_layer
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dh_survey_id = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dh_survey_depth = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dh_survey_azim = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dh_survey_incl = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dh_interval_layer = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:453 | Thread-127637006819456 | Failed to restore layer for dh_interval_layer
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dh_interval_id = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dh_interval_from = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dh_interval_to = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dh_interval_lith = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: last_output_dir = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: interp_custom_fields = 1.0
2026-01-18 19:16:53 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:172 | Thread-127637006819456 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: show_topo = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: show_geol = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: show_struct = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: show_drillholes = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: show_interpretations = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: auto_lod = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: adaptive_sampling = 1.0
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: max_points = 1.0
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-127637006819456 | Settings loaded successfully from Project/Global config
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.gui.main_dialog_cache_handler | clear_cache:25 | Thread-127637006819456 | Cache cleared by user
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-127637006819456 | GeologyGenerationTask started (Background Thread)
2026-01-18 19:16:53 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:63 | Thread-127637006819456 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/app/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-127637006819456 | GeologyGenerationTask started (Background Thread)
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-127637006819456 | GeologyGenerationTask finished with 1 segments
2026-01-18 19:16:53 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-127637006819456 | Test Title: Test Message
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-127637006819456 | Test Title: Test Message
2026-01-18 19:16:53 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-127637006819456 | Test Title: Test Message
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-127637006819456 | CRITICAL_OP: finalize_polygon | points=2
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-127637006819456 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-18 19:16:53 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-127637006819456 | finalize_polygon() aborted - less than 3 points
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-127637006819456 | CRITICAL_OP: finalize_polygon | points=3
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-127637006819456 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:333 | Thread-127637006819456 | finalize_polygon() - emitting polygonFinished signal for 37632158-0c36-4ade-a9ce-b2abb78c6d0d
2026-01-18 19:16:53 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:339 | Thread-127637006819456 | Interpretation polygon finalized with 3 vertices, ID: 37632158-0c36-4ade-a9ce-b2abb78c6d0d
2026-01-18 19:16:53 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:342 | Thread-127637006819456 | finalize_polygon() completed
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-127637006819456 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-127637006819456 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-127637006819456 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-127637006819456 | ProfileInterpretationTool.reset() completed
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-127637006819456 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-127637006819456 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-127637006819456 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-127637006819456 | ProfileInterpretationTool.reset() completed
2026-01-18 19:16:54 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:111 | Thread-127637006819456 | Failed to create locator for layer layer1: mock error
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:142 | Thread-127637006819456 | ProfileInterpretationTool.activate() called
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:145 | Thread-127637006819456 | ProfileInterpretationTool activated successfully
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:150 | Thread-127637006819456 | ProfileInterpretationTool.deactivate() called
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-127637006819456 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-127637006819456 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-127637006819456 | ProfileInterpretationTool.reset() completed
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:153 | Thread-127637006819456 | ProfileInterpretationTool deactivated successfully
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:234 | Thread-127637006819456 | Inherited attributes from geology: Limestone
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:59 | Thread-127637006819456 | Loaded 0 interpretations from project
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:59 | Thread-127637006819456 | Loaded 1 interpretations from project
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:94 | Thread-127637006819456 | Saved 1 interpretations to project
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: buffer_dist = 100.5
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:353 | Thread-127637006819456 | Persistent interpretations cleared by reset
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:358 | Thread-127637006819456 | Dialog reset to defaults by user
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:410 | Thread-127637006819456 | Setting saved to project: test_layer = id_123
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:410 | Thread-127637006819456 | Setting saved to project: test_layer_name = RealName
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: test_layer = 1.0
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:390 | Thread-127637006819456 | Project setting hit: test_layer_name = RealName
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:447 | Thread-127637006819456 | Restoring layer: test_layer -> RealName
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-127637006819456 | Point 1 added: 0.00, 0.00
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-127637006819456 | Point 2 added: 100.00, 100.00
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-127637006819456 | Point 1 added: 50.00, 50.00
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-127637006819456 | reset() called, finalized=False
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-127637006819456 | finalize_measurement called with 1 points
2026-01-18 19:16:54 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:275 | Thread-127637006819456 | Cannot finalize measurement with less than 2 points
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-127637006819456 | finalize_measurement called with 2 points
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-127637006819456 | Setting finalized = True
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-127637006819456 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-127637006819456 | Switching to pan tool to stop measurement
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-127637006819456 | Pan tool activated - measurement should be frozen
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:202 | Thread-127637006819456 | Ignoring click - measurement is finalized
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-127637006819456 | finalize_measurement called with 2 points
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-127637006819456 | Setting finalized = True
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-127637006819456 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-127637006819456 | Switching to pan tool to stop measurement
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-127637006819456 | Pan tool activated - measurement should be frozen
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-127637006819456 | reset() called, finalized=False
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-127637006819456 | reset() called, finalized=False
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-127637006819456 | reset() called, finalized=True
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:159 | Thread-127637006819456 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-127637006819456 | reset() called, finalized=False
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-127637006819456 | finalize_measurement called with 2 points
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-127637006819456 | Setting finalized = True
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-127637006819456 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:298 | Thread-127637006819456 | Rubber band redrawn with final points only
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-127637006819456 | Switching to pan tool to stop measurement
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-127637006819456 | Pan tool activated - measurement should be frozen
2026-01-18 19:16:54 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:103 | Thread-127637006819456 | Failed to create locator for layer layer1: mock error
2026-01-18 19:16:54 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:103 | Thread-127637006819456 | Failed to create locator for layer l2: fail
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:141 | Thread-127637006819456 | ProfileMeasureTool activated
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-127637006819456 | reset() called, finalized=False
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:147 | Thread-127637006819456 | ProfileMeasureTool deactivated
2026-01-18 19:16:54 | WARNING  | SecInterp.sec_interp.gui.main_dialog_messages | handle_error:67 | Thread-127637006819456 | App Error: Validation failed - Details: Check inputs
2026-01-18 19:16:54 | ERROR    | SecInterp.sec_interp.gui.main_dialog_messages | handle_error:74 | Thread-127637006819456 | System Error: An unexpected error occurred: Something went wrong
Stack trace details
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-127637006819456 | create_drillhole_trace_layer called with 1 holes
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:393 | Thread-127637006819456 | Adding 1 drillhole trace features to layer
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-127637006819456 | create_drillhole_trace_layer called with 1 holes
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:393 | Thread-127637006819456 | Adding 1 drillhole trace features to layer
2026-01-18 19:16:54 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-127637006819456 | Failed to create memory layer: Fail
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-127637006819456 | create_drillhole_trace_layer called with 0 holes
2026-01-18 19:16:54 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-127637006819456 | No drillhole data provided for trace layer
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-127637006819456 | create_drillhole_trace_layer called with 1 holes
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:380 | Thread-127637006819456 | Skipping hole H1: insufficient trace points (1)
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:393 | Thread-127637006819456 | Adding 0 drillhole trace features to layer
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-127637006819456 | create_drillhole_trace_layer called with 1 holes
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-127637006819456 | render() called
2026-01-18 19:16:54 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:156 | Thread-127637006819456 | No valid layers to render
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-127637006819456 | render() called
2026-01-18 19:16:54 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:221 | Thread-127637006819456 | Error exporting preview
Traceback (most recent call last):
  File "/app/sec_interp/gui/preview_renderer.py", line 198, in export_to_image
    settings = QgsMapSettings()
               ^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-127637006819456 | render() called
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-127637006819456 | render() called
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-127637006819456 | render() called
2026-01-18 19:16:54 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:156 | Thread-127637006819456 | No valid layers to render
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-127637006819456 | render() called
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-127637006819456 | render() called
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-127637006819456 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-127637006819456 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-127637006819456 | CacheService initialized (Default TTL: 3600s)
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-127637006819456 | ProfileController initialized
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:59 | Thread-127637006819456 | Loaded 0 interpretations from project
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: buffer_dist = 100.0
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dem_band = 1
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: scale = 50000.0
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: vert_exag = 1.0
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dh_use_geom = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: interp_inherit_geol = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: interp_inherit_drill = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: show_topo = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: show_geol = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: show_struct = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: show_drillholes = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: show_interpretations = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: auto_lod = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: adaptive_sampling = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: max_points = 10000
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-127637006819456 | Settings loaded successfully from Project/Global config
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:94 | Thread-127637006819456 | Saved 1 interpretations to project
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-127637006819456 | CacheService initialized (Default TTL: 3600s)
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-127637006819456 | ProfileController initialized
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:59 | Thread-127637006819456 | Loaded 0 interpretations from project
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: buffer_dist = 100.0
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dem_band = 1
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: scale = 50000.0
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: vert_exag = 1.0
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dh_use_geom = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: interp_inherit_geol = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: interp_inherit_drill = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: show_topo = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: show_geol = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: show_struct = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: show_drillholes = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: show_interpretations = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: auto_lod = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: adaptive_sampling = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: max_points = 10000
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-127637006819456 | Settings loaded successfully from Project/Global config
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:94 | Thread-127637006819456 | Saved 1 interpretations to project
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:94 | Thread-127637006819456 | Saved 0 interpretations to project
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-127637006819456 | CacheService initialized (Default TTL: 3600s)
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-127637006819456 | ProfileController initialized
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:59 | Thread-127637006819456 | Loaded 0 interpretations from project
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: buffer_dist = 100.0
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dem_band = 1
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: scale = 50000.0
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: vert_exag = 1.0
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dh_use_geom = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: interp_inherit_geol = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: interp_inherit_drill = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: show_topo = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: show_geol = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: show_struct = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: show_drillholes = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: show_interpretations = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: auto_lod = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: adaptive_sampling = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: max_points = 10000
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-127637006819456 | Settings loaded successfully from Project/Global config
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:59 | Thread-127637006819456 | Loaded 1 interpretations from project
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-127637006819456 | Point 1 added: 0.00, 0.00
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-127637006819456 | Point 2 added: 10.00, 10.00
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-127637006819456 | finalize_measurement called with 2 points
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-127637006819456 | Setting finalized = True
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-127637006819456 | Measurement finalized: 2 points, 14.14m total distance
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:298 | Thread-127637006819456 | Rubber band redrawn with final points only
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-127637006819456 | Switching to pan tool to stop measurement
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-127637006819456 | Pan tool activated - measurement should be frozen
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-127637006819456 | reset() called, finalized=True
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:159 | Thread-127637006819456 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-127637006819456 | Point 1 added: 0.00, 0.00
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-127637006819456 | Point 2 added: 100.00, 100.00
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-127637006819456 | Point 3 added: 200.00, 150.00
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-127637006819456 | CacheService initialized (Default TTL: 3600s)
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-127637006819456 | ProfileController initialized
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:59 | Thread-127637006819456 | Loaded 1 interpretations from project
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: buffer_dist = 100.0
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dem_band = 1
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: scale = 50000.0
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: vert_exag = 1.0
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dip_scale_factor = 1.0
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: dh_use_geom = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: interp_inherit_geol = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: interp_inherit_drill = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: show_topo = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: show_geol = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: show_struct = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: show_drillholes = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: show_interpretations = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: auto_lod = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: adaptive_sampling = True
2026-01-18 19:16:54 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-127637006819456 | Global setting fallback: max_points = 10000
2026-01-18 19:16:54 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-127637006819456 | Settings loaded successfully from Project/Global config
2026-01-18 22:59:19 | DEBUG    | SecInterp | setup_logging:144 | Thread-131966000722048 | Logging system initialized. Root Level: 10
2026-01-18 22:59:19 | DEBUG    | SecInterp | setup_logging:145 | Thread-131966000722048 | File logging path: /app/sec_interp/logs/sec_interp_debug.log
2026-01-18 22:59:19 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-131966000722048 | Configuration reset to defaults initiated
2026-01-18 22:59:19 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131966000722048 | Config set: SecInterp/scale = 50000.0
2026-01-18 22:59:19 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131966000722048 | Config set: SecInterp/vert_exag = 1.0
2026-01-18 22:59:19 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131966000722048 | Config set: SecInterp/buffer_dist = 100.0
2026-01-18 22:59:19 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131966000722048 | Config set: SecInterp/show_topo = True
2026-01-18 22:59:19 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131966000722048 | Config set: SecInterp/show_geol = True
2026-01-18 22:59:19 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131966000722048 | Config set: SecInterp/show_struct = True
2026-01-18 22:59:19 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131966000722048 | Config set: SecInterp/show_drillholes = True
2026-01-18 22:59:19 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131966000722048 | Config set: SecInterp/show_interpretations = True
2026-01-18 22:59:19 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131966000722048 | Config set: SecInterp/interp_inherit_geol = True
2026-01-18 22:59:19 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131966000722048 | Config set: SecInterp/interp_inherit_drill = True
2026-01-18 22:59:19 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131966000722048 | Config set: SecInterp/dh_use_geom = True
2026-01-18 22:59:19 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131966000722048 | Config set: SecInterp/auto_lod = False
2026-01-18 22:59:19 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131966000722048 | Config set: SecInterp/adaptive_sampling = True
2026-01-18 22:59:19 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131966000722048 | Config set: SecInterp/max_points = 10000
2026-01-18 22:59:19 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131966000722048 | Config set: SecInterp/dem_band = 1
2026-01-18 22:59:19 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131966000722048 | Config set: SecInterp/scale = 200.0
2026-01-18 22:59:19 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-131966000722048 | Config set: SecInterp/scale = 20000.0
2026-01-18 22:59:19 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131966000722048 | CacheService initialized (Default TTL: 3600s)
2026-01-18 22:59:19 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131966000722048 | CacheService initialized (Default TTL: 3600s)
2026-01-18 22:59:19 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131966000722048 | CacheService initialized (Default TTL: 3600s)
2026-01-18 22:59:19 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:98 | Thread-131966000722048 | Projecting collars from Test Layer with buffer 50.0m
2026-01-18 22:59:19 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:117 | Thread-131966000722048 | No collars found within buffer area.
2026-01-18 22:59:19 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:98 | Thread-131966000722048 | Projecting collars from Test Layer with buffer 50.0m
2026-01-18 22:59:19 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:138 | Thread-131966000722048 | DrillholeService.project_collars END: Found 1 collars.
2026-01-18 22:59:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-131966000722048 | ✓ Saving profile axes...
2026-01-18 22:59:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-131966000722048 | ✓ Saving topographic profile...
2026-01-18 22:59:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-131966000722048 | ✓ Saving profile axes...
2026-01-18 22:59:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-131966000722048 | ✓ Saving interpretation data...
2026-01-18 22:59:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:324 | Thread-131966000722048 | 3D Export features are restricted for this user.
2026-01-18 22:59:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-131966000722048 | ✓ Saving topographic profile...
2026-01-18 22:59:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-131966000722048 | ✓ Saving profile axes...
2026-01-18 22:59:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-131966000722048 | ✓ Saving interpretation data...
2026-01-18 22:59:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:307 | Thread-131966000722048 | ✓ Saving 3D interpretation data...
2026-01-18 22:59:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-131966000722048 | ✓ Saving topographic profile...
2026-01-18 22:59:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-131966000722048 | ✓ Saving profile axes...
2026-01-18 22:59:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:150 | Thread-131966000722048 | ✓ Saving geological profile...
2026-01-18 22:59:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:178 | Thread-131966000722048 | ✓ Saving structural profile...
2026-01-18 22:59:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:221 | Thread-131966000722048 | ✓ Saving drillhole data...
2026-01-18 22:59:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-131966000722048 | ✓ Saving interpretation data...
2026-01-18 22:59:19 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-131966000722048 | Access denied for restricted feature: 3D Export
2026-01-18 22:59:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:324 | Thread-131966000722048 | 3D Export features are restricted for this user.
2026-01-18 22:59:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-131966000722048 | ✓ Saving topographic profile...
2026-01-18 22:59:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:335 | Thread-131966000722048 | ✓ Saving profile axes...
2026-01-18 22:59:19 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-131966000722048 | No interpretations provided for export.
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:221 | Thread-131966000722048 | ✓ Saving drillhole data...
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:150 | Thread-131966000722048 | ✓ Saving geological profile...
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-131966000722048 | ✓ Saving interpretation data...
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:307 | Thread-131966000722048 | ✓ Saving 3D interpretation data...
2026-01-18 22:59:20 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:322 | Thread-131966000722048 | Invalid section line layer, skipping 3D export.
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:295 | Thread-131966000722048 | ✓ Saving interpretation data...
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:178 | Thread-131966000722048 | ✓ Saving structural profile...
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:125 | Thread-131966000722048 | ✓ Saving topographic profile...
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:336 | Thread-131966000722048 | Generating master profile with interval=10.00
2026-01-18 22:59:20 | INFO     | SecInterp.performance | measure_operation:244 | Thread-131966000722048 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0073, 'memory_mb': 0.0, 'memory_peak_mb': 0.32, 'timestamp': '2026-01-18 22:59:20', 'args_count': 5, 'kwargs_keys': []}
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:336 | Thread-131966000722048 | Generating master profile with interval=50.00
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:61 | Thread-131966000722048 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:61 | Thread-131966000722048 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-131966000722048 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-131966000722048 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-131966000722048 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-131966000722048 | Running geometry operation: test
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:264 | Thread-131966000722048 | Generated 1 drillhole traces
2026-01-18 22:59:20 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:256 | Thread-131966000722048 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 238, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-18 22:59:20 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:261 | Thread-131966000722048 | Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 238, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 238, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:264 | Thread-131966000722048 | Generated 1 drillhole traces
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:177 | Thread-131966000722048 | Drillhole preview skipped: No Collar ID field selected.
2026-01-18 22:59:20 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-131966000722048 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 22:59:20 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-131966000722048 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 22:59:20 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:196 | Thread-131966000722048 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 191, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 22:59:20 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:321 | Thread-131966000722048 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 314, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 191, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-18 22:59:20 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:156 | Thread-131966000722048 | Buffer creation failed
Traceback (most recent call last):
  File "/app/sec_interp/core/services/structure_service.py", line 154, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-131966000722048 | Analyzing structures in Structure Layer with buffer 10m
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:128 | Thread-131966000722048 | Processed 1 structural measurements from Structure Layer
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:149 | Thread-131966000722048 | Successfully exported to /tmp/test_dynamic.shp
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-131966000722048 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:135 | Thread-131966000722048 | Generated QML style: /tmp/test.qml
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-131966000722048 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:135 | Thread-131966000722048 | Generated QML style: dummy.qml
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-131966000722048 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:135 | Thread-131966000722048 | Generated QML style: dummy.qml
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-131966000722048 | GeologyGenerationTask started (Background Thread)
2026-01-18 22:59:20 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:63 | Thread-131966000722048 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/app/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-131966000722048 | GeologyGenerationTask started (Background Thread)
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-131966000722048 | GeologyGenerationTask finished with 1 segments
2026-01-18 22:59:20 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-131966000722048 | Test Title: Test Message
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-131966000722048 | Test Title: Test Message
2026-01-18 22:59:20 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-131966000722048 | Test Title: Test Message
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-131966000722048 | CRITICAL_OP: finalize_polygon | points=2
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-131966000722048 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-18 22:59:20 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:306 | Thread-131966000722048 | finalize_polygon() aborted - less than 3 points
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-131966000722048 | CRITICAL_OP: finalize_polygon | points=3
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-131966000722048 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:333 | Thread-131966000722048 | finalize_polygon() - emitting polygonFinished signal for e0bf3a00-7c7f-4917-a724-997a3869a406
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:339 | Thread-131966000722048 | Interpretation polygon finalized with 3 vertices, ID: e0bf3a00-7c7f-4917-a724-997a3869a406
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:342 | Thread-131966000722048 | finalize_polygon() completed
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-131966000722048 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-131966000722048 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-131966000722048 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-131966000722048 | ProfileInterpretationTool.reset() completed
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:214 | Thread-131966000722048 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-131966000722048 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-131966000722048 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-131966000722048 | ProfileInterpretationTool.reset() completed
2026-01-18 22:59:20 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:111 | Thread-131966000722048 | Failed to create locator for layer layer1: mock error
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:142 | Thread-131966000722048 | ProfileInterpretationTool.activate() called
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:145 | Thread-131966000722048 | ProfileInterpretationTool activated successfully
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:150 | Thread-131966000722048 | ProfileInterpretationTool.deactivate() called
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:162 | Thread-131966000722048 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:182 | Thread-131966000722048 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:184 | Thread-131966000722048 | ProfileInterpretationTool.reset() completed
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:153 | Thread-131966000722048 | ProfileInterpretationTool deactivated successfully
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:241 | Thread-131966000722048 | Inherited attributes from geology: Limestone
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:59 | Thread-131966000722048 | Loaded 0 interpretations from project
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:59 | Thread-131966000722048 | Loaded 1 interpretations from project
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:94 | Thread-131966000722048 | Saved 1 interpretations to project
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131966000722048 | Global setting fallback: buffer_dist = 100.5
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:353 | Thread-131966000722048 | Persistent interpretations cleared by reset
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:358 | Thread-131966000722048 | Dialog reset to defaults by user
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:410 | Thread-131966000722048 | Setting saved to project: test_layer = id_123
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:410 | Thread-131966000722048 | Setting saved to project: test_layer_name = RealName
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:398 | Thread-131966000722048 | Global setting fallback: test_layer = 1.0
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:390 | Thread-131966000722048 | Project setting hit: test_layer_name = RealName
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:447 | Thread-131966000722048 | Restoring layer: test_layer -> RealName
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-131966000722048 | Point 1 added: 0.00, 0.00
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-131966000722048 | Point 2 added: 100.00, 100.00
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-131966000722048 | Point 1 added: 50.00, 50.00
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-131966000722048 | reset() called, finalized=False
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-131966000722048 | finalize_measurement called with 1 points
2026-01-18 22:59:20 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:275 | Thread-131966000722048 | Cannot finalize measurement with less than 2 points
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-131966000722048 | finalize_measurement called with 2 points
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-131966000722048 | Setting finalized = True
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-131966000722048 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-131966000722048 | Switching to pan tool to stop measurement
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-131966000722048 | Pan tool activated - measurement should be frozen
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:202 | Thread-131966000722048 | Ignoring click - measurement is finalized
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-131966000722048 | finalize_measurement called with 2 points
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-131966000722048 | Setting finalized = True
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-131966000722048 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-131966000722048 | Switching to pan tool to stop measurement
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-131966000722048 | Pan tool activated - measurement should be frozen
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-131966000722048 | reset() called, finalized=False
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-131966000722048 | reset() called, finalized=False
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-131966000722048 | reset() called, finalized=True
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:159 | Thread-131966000722048 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-131966000722048 | reset() called, finalized=False
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-131966000722048 | finalize_measurement called with 2 points
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-131966000722048 | Setting finalized = True
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-131966000722048 | Measurement finalized: 2 points, 100.00m total distance
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:298 | Thread-131966000722048 | Rubber band redrawn with final points only
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-131966000722048 | Switching to pan tool to stop measurement
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-131966000722048 | Pan tool activated - measurement should be frozen
2026-01-18 22:59:20 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:103 | Thread-131966000722048 | Failed to create locator for layer layer1: mock error
2026-01-18 22:59:20 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:103 | Thread-131966000722048 | Failed to create locator for layer l2: fail
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:141 | Thread-131966000722048 | ProfileMeasureTool activated
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-131966000722048 | reset() called, finalized=False
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:147 | Thread-131966000722048 | ProfileMeasureTool deactivated
2026-01-18 22:59:20 | WARNING  | SecInterp.sec_interp.gui.main_dialog_messages | handle_error:67 | Thread-131966000722048 | App Error: Validation failed - Details: Check inputs
2026-01-18 22:59:20 | ERROR    | SecInterp.sec_interp.gui.main_dialog_messages | handle_error:74 | Thread-131966000722048 | System Error: An unexpected error occurred: Something went wrong
Stack trace details
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-131966000722048 | create_drillhole_trace_layer called with 1 holes
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:393 | Thread-131966000722048 | Adding 1 drillhole trace features to layer
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-131966000722048 | create_drillhole_trace_layer called with 1 holes
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:393 | Thread-131966000722048 | Adding 1 drillhole trace features to layer
2026-01-18 22:59:20 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-131966000722048 | Failed to create memory layer: Fail
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-131966000722048 | create_drillhole_trace_layer called with 0 holes
2026-01-18 22:59:20 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:362 | Thread-131966000722048 | No drillhole data provided for trace layer
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-131966000722048 | create_drillhole_trace_layer called with 1 holes
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:380 | Thread-131966000722048 | Skipping hole H1: insufficient trace points (1)
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:393 | Thread-131966000722048 | Adding 0 drillhole trace features to layer
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:358 | Thread-131966000722048 | create_drillhole_trace_layer called with 1 holes
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131966000722048 | render() called
2026-01-18 22:59:20 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:156 | Thread-131966000722048 | No valid layers to render
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131966000722048 | render() called
2026-01-18 22:59:20 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:221 | Thread-131966000722048 | Error exporting preview
Traceback (most recent call last):
  File "/app/sec_interp/gui/preview_renderer.py", line 198, in export_to_image
    settings = QgsMapSettings()
               ^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131966000722048 | render() called
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131966000722048 | render() called
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131966000722048 | render() called
2026-01-18 22:59:20 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:156 | Thread-131966000722048 | No valid layers to render
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131966000722048 | render() called
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-131966000722048 | render() called
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-131966000722048 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:350 | Thread-131966000722048 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131966000722048 | CacheService initialized (Default TTL: 3600s)
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-131966000722048 | ProfileController initialized
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131966000722048 | CacheService initialized (Default TTL: 3600s)
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-131966000722048 | ProfileController initialized
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131966000722048 | CacheService initialized (Default TTL: 3600s)
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-131966000722048 | ProfileController initialized
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-131966000722048 | Point 1 added: 0.00, 0.00
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-131966000722048 | Point 2 added: 10.00, 10.00
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:272 | Thread-131966000722048 | finalize_measurement called with 2 points
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:282 | Thread-131966000722048 | Setting finalized = True
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:287 | Thread-131966000722048 | Measurement finalized: 2 points, 14.14m total distance
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:298 | Thread-131966000722048 | Rubber band redrawn with final points only
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:302 | Thread-131966000722048 | Switching to pan tool to stop measurement
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:305 | Thread-131966000722048 | Pan tool activated - measurement should be frozen
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-131966000722048 | reset() called, finalized=True
2026-01-18 22:59:20 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:159 | Thread-131966000722048 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-131966000722048 | Point 1 added: 0.00, 0.00
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-131966000722048 | Point 2 added: 100.00, 100.00
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:257 | Thread-131966000722048 | Point 3 added: 200.00, 150.00
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-131966000722048 | CacheService initialized (Default TTL: 3600s)
2026-01-18 22:59:20 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-131966000722048 | ProfileController initialized
2026-01-19 00:06:09 | DEBUG    | SecInterp | setup_logging:142 | Thread-124674000097408 | Logging system initialized. Root Level: 10
2026-01-19 00:06:09 | DEBUG    | SecInterp | setup_logging:143 | Thread-124674000097408 | File logging path: /app/sec_interp/logs/sec_interp_debug.log
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-124674000097408 | Configuration reset to defaults initiated
2026-01-19 00:06:09 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124674000097408 | Config set: SecInterp/scale = 50000.0
2026-01-19 00:06:09 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124674000097408 | Config set: SecInterp/vert_exag = 1.0
2026-01-19 00:06:09 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124674000097408 | Config set: SecInterp/buffer_dist = 100.0
2026-01-19 00:06:09 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124674000097408 | Config set: SecInterp/show_topo = True
2026-01-19 00:06:09 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124674000097408 | Config set: SecInterp/show_geol = True
2026-01-19 00:06:09 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124674000097408 | Config set: SecInterp/show_struct = True
2026-01-19 00:06:09 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124674000097408 | Config set: SecInterp/show_drillholes = True
2026-01-19 00:06:09 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124674000097408 | Config set: SecInterp/show_interpretations = True
2026-01-19 00:06:09 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124674000097408 | Config set: SecInterp/interp_inherit_geol = True
2026-01-19 00:06:09 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124674000097408 | Config set: SecInterp/interp_inherit_drill = True
2026-01-19 00:06:09 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124674000097408 | Config set: SecInterp/dh_use_geom = True
2026-01-19 00:06:09 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124674000097408 | Config set: SecInterp/auto_lod = False
2026-01-19 00:06:09 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124674000097408 | Config set: SecInterp/adaptive_sampling = True
2026-01-19 00:06:09 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124674000097408 | Config set: SecInterp/max_points = 10000
2026-01-19 00:06:09 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124674000097408 | Config set: SecInterp/dem_band = 1
2026-01-19 00:06:09 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124674000097408 | Config set: SecInterp/scale = 200.0
2026-01-19 00:06:09 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-124674000097408 | Config set: SecInterp/scale = 20000.0
2026-01-19 00:06:09 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124674000097408 | CacheService initialized (Default TTL: 3600s)
2026-01-19 00:06:09 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124674000097408 | CacheService initialized (Default TTL: 3600s)
2026-01-19 00:06:09 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124674000097408 | CacheService initialized (Default TTL: 3600s)
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-124674000097408 | Projecting collars from Test Layer with buffer 50.0m
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:106 | Thread-124674000097408 | No collars found within buffer area.
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-124674000097408 | Projecting collars from Test Layer with buffer 50.0m
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:127 | Thread-124674000097408 | DrillholeService.project_collars END: Found 1 collars.
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-124674000097408 | ✓ Saving profile axes...
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-124674000097408 | ✓ Saving topographic profile...
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-124674000097408 | ✓ Saving profile axes...
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-124674000097408 | ✓ Saving interpretation data...
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-124674000097408 | 3D Export features are restricted for this user.
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-124674000097408 | ✓ Saving topographic profile...
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-124674000097408 | ✓ Saving profile axes...
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-124674000097408 | ✓ Saving interpretation data...
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-124674000097408 | ✓ Saving 3D interpretation data...
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-124674000097408 | ✓ Saving topographic profile...
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-124674000097408 | ✓ Saving profile axes...
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-124674000097408 | ✓ Saving geological profile...
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-124674000097408 | ✓ Saving structural profile...
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-124674000097408 | ✓ Saving drillhole data...
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-124674000097408 | ✓ Saving interpretation data...
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-124674000097408 | Access denied for restricted feature: 3D Export
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-124674000097408 | 3D Export features are restricted for this user.
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-124674000097408 | ✓ Saving topographic profile...
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-124674000097408 | ✓ Saving profile axes...
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-124674000097408 | No interpretations provided for export.
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-124674000097408 | ✓ Saving drillhole data...
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-124674000097408 | ✓ Saving geological profile...
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-124674000097408 | ✓ Saving interpretation data...
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-124674000097408 | ✓ Saving 3D interpretation data...
2026-01-19 00:06:09 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-124674000097408 | Invalid section line layer, skipping 3D export.
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-124674000097408 | ✓ Saving interpretation data...
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-124674000097408 | ✓ Saving structural profile...
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-124674000097408 | ✓ Saving topographic profile...
2026-01-19 00:06:09 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-124674000097408 | Generating master profile with interval=10.00
2026-01-19 00:06:09 | INFO     | SecInterp.performance | measure_operation:244 | Thread-124674000097408 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0093, 'memory_mb': 0.0, 'memory_peak_mb': 0.32, 'timestamp': '2026-01-19 00:06:09', 'args_count': 5, 'kwargs_keys': []}
2026-01-19 00:06:09 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-124674000097408 | Generating master profile with interval=50.00
2026-01-19 00:06:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-124674000097408 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-19 00:06:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-124674000097408 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-19 00:06:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-124674000097408 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-19 00:06:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-124674000097408 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-19 00:06:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-124674000097408 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-19 00:06:09 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-124674000097408 | Running geometry operation: test
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-124674000097408 | Generated 1 drillhole traces
2026-01-19 00:06:09 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-124674000097408 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-19 00:06:09 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:251 | Thread-124674000097408 | Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-124674000097408 | Generated 1 drillhole traces
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:171 | Thread-124674000097408 | Drillhole preview skipped: No Collar ID field selected.
2026-01-19 00:06:09 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-124674000097408 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-19 00:06:09 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-124674000097408 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-19 00:06:09 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-124674000097408 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-19 00:06:09 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-124674000097408 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-19 00:06:09 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-124674000097408 | Buffer creation failed
Traceback (most recent call last):
  File "/app/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-124674000097408 | Analyzing structures in Structure Layer with buffer 10m
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-124674000097408 | Processed 1 structural measurements from Structure Layer
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-124674000097408 | Successfully exported to /tmp/test_dynamic.shp
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-124674000097408 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-124674000097408 | Generated QML style: /tmp/test.qml
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-124674000097408 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-124674000097408 | Generated QML style: dummy.qml
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-124674000097408 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-124674000097408 | Generated QML style: dummy.qml
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-124674000097408 | GeologyGenerationTask started (Background Thread)
2026-01-19 00:06:09 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-124674000097408 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/app/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-19 00:06:09 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-124674000097408 | GeologyGenerationTask started (Background Thread)
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-124674000097408 | GeologyGenerationTask finished with 1 segments
2026-01-19 00:06:10 | ERROR    | SecInterp.sec_interp.gui.utils | show_user_message:28 | Thread-124674000097408 | Test Title: Test Message
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.utils | show_user_message:32 | Thread-124674000097408 | Test Title: Test Message
2026-01-19 00:06:10 | WARNING  | SecInterp.sec_interp.gui.utils | show_user_message:30 | Thread-124674000097408 | Test Title: Test Message
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-124674000097408 | CRITICAL_OP: finalize_polygon | points=2
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-124674000097408 | ProfileInterpretationTool.finalize_polygon() called with 2 points
2026-01-19 00:06:10 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:302 | Thread-124674000097408 | finalize_polygon() aborted - less than 3 points
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-124674000097408 | CRITICAL_OP: finalize_polygon | points=3
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:298 | Thread-124674000097408 | ProfileInterpretationTool.finalize_polygon() called with 3 points
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:327 | Thread-124674000097408 | finalize_polygon() - emitting polygonFinished signal for 16a64a7a-5284-4d58-b22d-876ce216eae9
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:331 | Thread-124674000097408 | Interpretation polygon finalized with 3 vertices, ID: 16a64a7a-5284-4d58-b22d-876ce216eae9
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | finalize_polygon:334 | Thread-124674000097408 | finalize_polygon() completed
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-124674000097408 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-124674000097408 | ProfileInterpretationTool.reset() called - 0 points, 1 markers
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-124674000097408 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-124674000097408 | ProfileInterpretationTool.reset() completed
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | log_critical_operation:206 | Thread-124674000097408 | CRITICAL_OP: reset_interpretation_tool | points=0
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-124674000097408 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-124674000097408 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-124674000097408 | ProfileInterpretationTool.reset() completed
2026-01-19 00:06:10 | WARNING  | SecInterp.sec_interp.gui.tools.interpretation_tool | _get_locator:109 | Thread-124674000097408 | Failed to create locator for layer layer1: mock error
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:138 | Thread-124674000097408 | ProfileInterpretationTool.activate() called
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | activate:141 | Thread-124674000097408 | ProfileInterpretationTool activated successfully
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:146 | Thread-124674000097408 | ProfileInterpretationTool.deactivate() called
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:158 | Thread-124674000097408 | ProfileInterpretationTool.reset() called - 0 points, 0 markers
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:178 | Thread-124674000097408 | ProfileInterpretationTool.reset() - refreshing canvas
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | reset:180 | Thread-124674000097408 | ProfileInterpretationTool.reset() completed
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.tools.interpretation_tool | deactivate:149 | Thread-124674000097408 | ProfileInterpretationTool deactivated successfully
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:231 | Thread-124674000097408 | Inherited attributes from geology: Limestone
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-124674000097408 | Loaded 0 interpretations from project
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-124674000097408 | Loaded 1 interpretations from project
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_interpretation | save_interpretations:90 | Thread-124674000097408 | Saved 1 interpretations to project
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-124674000097408 | Global setting fallback: buffer_dist = 100.5
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:343 | Thread-124674000097408 | Persistent interpretations cleared by reset
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | reset_to_defaults:348 | Thread-124674000097408 | Dialog reset to defaults by user
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:400 | Thread-124674000097408 | Setting saved to project: test_layer = id_123
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _set_setting:400 | Thread-124674000097408 | Setting saved to project: test_layer_name = RealName
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-124674000097408 | Global setting fallback: test_layer = 1.0
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:380 | Thread-124674000097408 | Project setting hit: test_layer_name = RealName
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:437 | Thread-124674000097408 | Restoring layer: test_layer -> RealName
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-124674000097408 | Point 1 added: 0.00, 0.00
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-124674000097408 | Point 2 added: 100.00, 100.00
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-124674000097408 | Point 1 added: 50.00, 50.00
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-124674000097408 | reset() called, finalized=False
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124674000097408 | finalize_measurement called with 1 points
2026-01-19 00:06:10 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:269 | Thread-124674000097408 | Cannot finalize measurement with less than 2 points
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124674000097408 | finalize_measurement called with 2 points
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-124674000097408 | Setting finalized = True
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-124674000097408 | Measurement finalized: 2 points, 100.00m total distance
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-124674000097408 | Switching to pan tool to stop measurement
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-124674000097408 | Pan tool activated - measurement should be frozen
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | canvasReleaseEvent:198 | Thread-124674000097408 | Ignoring click - measurement is finalized
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124674000097408 | finalize_measurement called with 2 points
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-124674000097408 | Setting finalized = True
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-124674000097408 | Measurement finalized: 2 points, 100.00m total distance
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-124674000097408 | Switching to pan tool to stop measurement
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-124674000097408 | Pan tool activated - measurement should be frozen
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-124674000097408 | reset() called, finalized=False
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-124674000097408 | reset() called, finalized=False
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-124674000097408 | reset() called, finalized=True
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-124674000097408 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-124674000097408 | reset() called, finalized=False
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124674000097408 | finalize_measurement called with 2 points
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-124674000097408 | Setting finalized = True
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-124674000097408 | Measurement finalized: 2 points, 100.00m total distance
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-124674000097408 | Rubber band redrawn with final points only
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-124674000097408 | Switching to pan tool to stop measurement
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-124674000097408 | Pan tool activated - measurement should be frozen
2026-01-19 00:06:10 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-124674000097408 | Failed to create locator for layer layer1: mock error
2026-01-19 00:06:10 | WARNING  | SecInterp.sec_interp.gui.tools.measure_tool | _get_locator:101 | Thread-124674000097408 | Failed to create locator for layer l2: fail
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | activate:137 | Thread-124674000097408 | ProfileMeasureTool activated
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-124674000097408 | reset() called, finalized=False
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | deactivate:143 | Thread-124674000097408 | ProfileMeasureTool deactivated
2026-01-19 00:06:10 | WARNING  | SecInterp.sec_interp.gui.main_dialog_messages | handle_error:63 | Thread-124674000097408 | App Error: Validation failed - Details: Check inputs
2026-01-19 00:06:10 | ERROR    | SecInterp.sec_interp.gui.main_dialog_messages | handle_error:68 | Thread-124674000097408 | System Error: An unexpected error occurred: Something went wrong
Stack trace details
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124674000097408 | create_drillhole_trace_layer called with 1 holes
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-124674000097408 | Adding 1 drillhole trace features to layer
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124674000097408 | create_drillhole_trace_layer called with 1 holes
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-124674000097408 | Adding 1 drillhole trace features to layer
2026-01-19 00:06:10 | ERROR    | SecInterp.sec_interp.gui.preview_layer_factory | create_memory_layer:104 | Thread-124674000097408 | Failed to create memory layer: Fail
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124674000097408 | create_drillhole_trace_layer called with 0 holes
2026-01-19 00:06:10 | WARNING  | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:350 | Thread-124674000097408 | No drillhole data provided for trace layer
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124674000097408 | create_drillhole_trace_layer called with 1 holes
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:368 | Thread-124674000097408 | Skipping hole H1: insufficient trace points (1)
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:381 | Thread-124674000097408 | Adding 0 drillhole trace features to layer
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.preview_layer_factory | create_drillhole_trace_layer:346 | Thread-124674000097408 | create_drillhole_trace_layer called with 1 holes
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124674000097408 | render() called
2026-01-19 00:06:10 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-124674000097408 | No valid layers to render
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124674000097408 | render() called
2026-01-19 00:06:10 | ERROR    | SecInterp.sec_interp.gui.preview_renderer | export_to_image:217 | Thread-124674000097408 | Error exporting preview
Traceback (most recent call last):
  File "/app/sec_interp/gui/preview_renderer.py", line 194, in export_to_image
    settings = QgsMapSettings()
               ^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Boom
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124674000097408 | render() called
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124674000097408 | render() called
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124674000097408 | render() called
2026-01-19 00:06:10 | WARNING  | SecInterp.sec_interp.gui.preview_renderer | render:152 | Thread-124674000097408 | No valid layers to render
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124674000097408 | render() called
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.preview_renderer | render:88 | Thread-124674000097408 | render() called
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-124674000097408 | Section Plane: Origin(1000.00, 2000.00), Azimuth(0.00 deg)
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-124674000097408 | Section Plane: Origin(1000.00, 2000.00), Azimuth(90.00 deg)
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124674000097408 | CacheService initialized (Default TTL: 3600s)
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-124674000097408 | ProfileController initialized
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124674000097408 | CacheService initialized (Default TTL: 3600s)
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-124674000097408 | ProfileController initialized
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124674000097408 | CacheService initialized (Default TTL: 3600s)
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-124674000097408 | ProfileController initialized
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-124674000097408 | Point 1 added: 0.00, 0.00
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-124674000097408 | Point 2 added: 10.00, 10.00
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:266 | Thread-124674000097408 | finalize_measurement called with 2 points
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:276 | Thread-124674000097408 | Setting finalized = True
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:281 | Thread-124674000097408 | Measurement finalized: 2 points, 14.14m total distance
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:292 | Thread-124674000097408 | Rubber band redrawn with final points only
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:296 | Thread-124674000097408 | Switching to pan tool to stop measurement
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | finalize_measurement:299 | Thread-124674000097408 | Pan tool activated - measurement should be frozen
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:151 | Thread-124674000097408 | reset() called, finalized=True
2026-01-19 00:06:10 | INFO     | SecInterp.sec_interp.gui.tools.measure_tool | reset:155 | Thread-124674000097408 | Measurement is finalized - keeping visuals and results, clearing data only
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-124674000097408 | Point 1 added: 0.00, 0.00
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-124674000097408 | Point 2 added: 100.00, 100.00
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.gui.tools.measure_tool | _add_point:253 | Thread-124674000097408 | Point 3 added: 200.00, 150.00
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-124674000097408 | CacheService initialized (Default TTL: 3600s)
2026-01-19 00:06:10 | DEBUG    | SecInterp.sec_interp.core.controller | __init__:39 | Thread-124674000097408 | ProfileController initialized
2026-01-19 00:08:41 | DEBUG    | SecInterp | setup_logging:142 | Thread-135693567545472 | Logging system initialized. Root Level: 10
2026-01-19 00:08:41 | DEBUG    | SecInterp | setup_logging:143 | Thread-135693567545472 | File logging path: /app/sec_interp/logs/sec_interp_debug.log
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.config | reset_defaults:207 | Thread-135693567545472 | Configuration reset to defaults initiated
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135693567545472 | Config set: SecInterp/scale = 50000.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135693567545472 | Config set: SecInterp/vert_exag = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135693567545472 | Config set: SecInterp/buffer_dist = 100.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135693567545472 | Config set: SecInterp/show_topo = True
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135693567545472 | Config set: SecInterp/show_geol = True
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135693567545472 | Config set: SecInterp/show_struct = True
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135693567545472 | Config set: SecInterp/show_drillholes = True
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135693567545472 | Config set: SecInterp/show_interpretations = True
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135693567545472 | Config set: SecInterp/interp_inherit_geol = True
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135693567545472 | Config set: SecInterp/interp_inherit_drill = True
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135693567545472 | Config set: SecInterp/dh_use_geom = True
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135693567545472 | Config set: SecInterp/auto_lod = False
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135693567545472 | Config set: SecInterp/adaptive_sampling = True
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135693567545472 | Config set: SecInterp/max_points = 10000
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135693567545472 | Config set: SecInterp/dem_band = 1
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135693567545472 | Config set: SecInterp/scale = 200.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.core.config | set:203 | Thread-135693567545472 | Config set: SecInterp/scale = 20000.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135693567545472 | CacheService initialized (Default TTL: 3600s)
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135693567545472 | CacheService initialized (Default TTL: 3600s)
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.core.data_cache | __init__:38 | Thread-135693567545472 | CacheService initialized (Default TTL: 3600s)
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-135693567545472 | Projecting collars from Test Layer with buffer 50.0m
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:106 | Thread-135693567545472 | No collars found within buffer area.
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:91 | Thread-135693567545472 | Projecting collars from Test Layer with buffer 50.0m
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.drillhole_service | project_collars:127 | Thread-135693567545472 | DrillholeService.project_collars END: Found 1 collars.
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-135693567545472 | ✓ Saving profile axes...
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-135693567545472 | ✓ Saving topographic profile...
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-135693567545472 | ✓ Saving profile axes...
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-135693567545472 | ✓ Saving interpretation data...
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-135693567545472 | 3D Export features are restricted for this user.
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-135693567545472 | ✓ Saving topographic profile...
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-135693567545472 | ✓ Saving profile axes...
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-135693567545472 | ✓ Saving interpretation data...
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-135693567545472 | ✓ Saving 3D interpretation data...
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-135693567545472 | ✓ Saving topographic profile...
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-135693567545472 | ✓ Saving profile axes...
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-135693567545472 | ✓ Saving geological profile...
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-135693567545472 | ✓ Saving structural profile...
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-135693567545472 | ✓ Saving drillhole data...
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-135693567545472 | ✓ Saving interpretation data...
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.access_control_service | can_export_3d:32 | Thread-135693567545472 | Access denied for restricted feature: 3D Export
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:320 | Thread-135693567545472 | 3D Export features are restricted for this user.
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-135693567545472 | ✓ Saving topographic profile...
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_axes:329 | Thread-135693567545472 | ✓ Saving profile axes...
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:287 | Thread-135693567545472 | No interpretations provided for export.
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_drillholes:217 | Thread-135693567545472 | ✓ Saving drillhole data...
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_geology:146 | Thread-135693567545472 | ✓ Saving geological profile...
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-135693567545472 | ✓ Saving interpretation data...
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:303 | Thread-135693567545472 | ✓ Saving 3D interpretation data...
2026-01-19 00:08:42 | WARNING  | SecInterp.sec_interp.core.services.export_service | _export_interpretations:318 | Thread-135693567545472 | Invalid section line layer, skipping 3D export.
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_interpretations:291 | Thread-135693567545472 | ✓ Saving interpretation data...
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_structures:174 | Thread-135693567545472 | ✓ Saving structural profile...
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.export_service | _export_topography:121 | Thread-135693567545472 | ✓ Saving topographic profile...
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-135693567545472 | Generating master profile with interval=10.00
2026-01-19 00:08:42 | INFO     | SecInterp.performance | measure_operation:244 | Thread-135693567545472 | Performance: {'operation': 'sec_interp.core.services.geology_service.generate_geological_profile', 'duration_seconds': 0.0064, 'memory_mb': 0.0, 'memory_peak_mb': 0.32, 'timestamp': '2026-01-19 00:08:42', 'args_count': 5, 'kwargs_keys': []}
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.core.services.geology_service | _generate_master_profile_data:332 | Thread-135693567545472 | Generating master profile with interval=50.00
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-135693567545472 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.filtering | filter_features_by_buffer:59 | Thread-135693567545472 | Spatial Filter: confirmed 1 features intersecting buffer
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | adaptive_sample:163 | Thread-135693567545472 | Adaptive sampling: Avg curvature=0.00, calculated tolerance=10.00
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-135693567545472 | LOD Decimation: 100 -> 100 points (tol=10.00)
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.optimization | decimate:65 | Thread-135693567545472 | LOD Decimation: 3 -> 3 points (tol=10.00)
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.core.utils.geometry_utils.processing | run_geometry_operation:102 | Thread-135693567545472 | Running geometry operation: test
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-135693567545472 | Generated 1 drillhole traces
2026-01-19 00:08:42 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:248 | Thread-135693567545472 | Failed to process drillhole intervals: Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-19 00:08:42 | ERROR    | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:251 | Thread-135693567545472 | Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
Traceback (most recent call last):
  File "/app/sec_interp/core/services/preview_service.py", line 230, in _generate_drillholes
    _, drillhole_data = self.controller.drillhole_service.process_intervals(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Interval failure
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:254 | Thread-135693567545472 | Generated 1 drillhole traces
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.preview_service | _generate_drillholes:171 | Thread-135693567545472 | Drillhole preview skipped: No Collar ID field selected.
2026-01-19 00:08:42 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:67 | Thread-135693567545472 | Failed to export profile line to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-19 00:08:42 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:107 | Thread-135693567545472 | Failed to export geology profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-19 00:08:42 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:192 | Thread-135693567545472 | Failed to export structural profile to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-19 00:08:42 | ERROR    | SecInterp.sec_interp.exporters.profile_exporters | export:317 | Thread-135693567545472 | Failed to export axes to /tmp/test_export.shp
Traceback (most recent call last):
  File "/app/sec_interp/exporters/profile_exporters.py", line 310, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 187, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 101, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
  File "/app/sec_interp/exporters/profile_exporters.py", line 60, in export
    writer = scu.create_shapefile_writer(str(output_path), crs, fields)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: mock fail
2026-01-19 00:08:42 | ERROR    | SecInterp.sec_interp.core.services.structure_service | _create_buffer_zone:152 | Thread-135693567545472 | Buffer creation failed
Traceback (most recent call last):
  File "/app/sec_interp/core/services/structure_service.py", line 150, in _create_buffer_zone
    return scu.create_buffer_geometry(line_geom, crs, buffer_m, segments=25)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
ValueError: Test Error
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:91 | Thread-135693567545472 | Analyzing structures in Structure Layer with buffer 10m
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.core.services.structure_service | project_structures:124 | Thread-135693567545472 | Processed 1 structural measurements from Structure Layer
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.exporters.interpretation_exporters | _write_to_file:145 | Thread-135693567545472 | Successfully exported to /tmp/test_dynamic.shp
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-135693567545472 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-135693567545472 | Generated QML style: /tmp/test.qml
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-135693567545472 | Section Plane: Origin(0.00, 0.00), Azimuth(90.00 deg)
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-135693567545472 | Generated QML style: dummy.qml
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _calculate_section_geometry:340 | Thread-135693567545472 | Section Plane: Origin(0.00, 0.00), Azimuth(0.00 deg)
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.exporters.interpretation_3d_exporter | _generate_qml_style:133 | Thread-135693567545472 | Generated QML style: dummy.qml
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-135693567545472 | Loaded 0 interpretations from project
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | apply_attribute_inheritance:231 | Thread-135693567545472 | Inherited attributes from geology: GeologyUnit
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.gui.main_dialog_interpretation | load_interpretations:57 | Thread-135693567545472 | Loaded 0 interpretations from project
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: section_layer = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: section_layer_name = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-135693567545472 | Failed to restore layer for section_layer
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: buffer_dist = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: dem_layer = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: dem_layer_name = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-135693567545472 | Failed to restore layer for dem_layer
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: dem_band = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: scale = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: vert_exag = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: geol_layer = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: geol_layer_name = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-135693567545472 | Failed to restore layer for geol_layer
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: geol_field = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: struct_layer = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: struct_layer_name = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-135693567545472 | Failed to restore layer for struct_layer
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: struct_dip_field = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: struct_strike_field = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: dip_scale_factor = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: dh_collar_layer = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: dh_collar_layer_name = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-135693567545472 | Failed to restore layer for dh_collar_layer
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: dh_collar_id = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: dh_use_geom = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: dh_collar_x = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: dh_collar_y = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: dh_collar_z = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: dh_collar_depth = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: dh_survey_layer = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: dh_survey_layer_name = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-135693567545472 | Failed to restore layer for dh_survey_layer
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: dh_survey_id = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: dh_survey_depth = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: dh_survey_azim = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: dh_survey_incl = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: dh_interval_layer = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: dh_interval_layer_name = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _restore_layer:443 | Thread-135693567545472 | Failed to restore layer for dh_interval_layer
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: dh_interval_id = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: dh_interval_from = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: dh_interval_to = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: dh_interval_lith = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: last_output_dir = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: interp_inherit_geol = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: interp_inherit_drill = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: interp_custom_fields = 1.0
2026-01-19 00:08:42 | WARNING  | SecInterp.sec_interp.gui.main_dialog_settings | _load_interpretation_settings:170 | Thread-135693567545472 | Failed to restore custom fields: the JSON object must be str, bytes or bytearray, not float
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: show_topo = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: show_geol = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: show_struct = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: show_drillholes = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: show_interpretations = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: auto_lod = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: adaptive_sampling = 1.0
2026-01-19 00:08:42 | DEBUG    | SecInterp.sec_interp.gui.main_dialog_settings | _get_setting:388 | Thread-135693567545472 | Global setting fallback: max_points = 1.0
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.gui.main_dialog_settings | load_settings:48 | Thread-135693567545472 | Settings loaded successfully from Project/Global config
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.gui.main_dialog_cache_handler | clear_cache:25 | Thread-135693567545472 | Cache cleared by user
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-135693567545472 | GeologyGenerationTask started (Background Thread)
2026-01-19 00:08:42 | ERROR    | SecInterp.sec_interp.gui.tasks.geology_task | run:61 | Thread-135693567545472 | Error in GeologyGenerationTask: Processing Error
Traceback (most recent call last):
  File "/app/sec_interp/gui/tasks/geology_task.py", line 56, in run
    self.result = self.service.process_task_data(self.task_input, feedback=self)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1134, in __call__
    return self._mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1138, in _mock_call
    return self._execute_mock_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/unittest/mock.py", line 1193, in _execute_mock_call
    raise effect
Exception: Processing Error
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:54 | Thread-135693567545472 | GeologyGenerationTask started (Background Thread)
2026-01-19 00:08:42 | INFO     | SecInterp.sec_interp.gui.tasks.geology_task | run:57 | Thread-135693567545472 | GeologyGenerationTask finished with 1 segments
